【0134】【明日之星-RecyclerView】

1.RecyClerView的认识

2.显示的效果

【传统的listView】

【GridView】纵向的GridView;

 

【horizentalGridView】横向的GridView

【瀑布流效果】

【动画效果】删除-增加,目前官方的api只提供了一种动画效果,但是在gitHub中已经存在很多种提供动画的解决方案;

3. RecyclerView之实现ListView

3.1 依赖的添加

 

【导入jar包】

 3.2 整体布局

【布局】只布局一个RecycleView控件;

【源码实现】

3.3 适配器

【Adapter的实现】

【item的布局】

【完善adapter】

【绑定Holder】

3.4 设置适配器和布局

 【效果】

3.5 为listView 添加分割线

 

【使用第三方的已经实现的类】参考https://www.imooc.com/learn/215 该课程中对该类进行了书写;

【效果】显示了默认的devider

4. 定制分割线

【说明】颜色的drawable的获取

 

【设置them的属性值】

【效果】

5.GridView的实现

5.1 添加menuitem的选择项

 【源码】RecyclerViewTest-master\app\src\main\res\menu\menu.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3       xmlns:app="http://schemas.android.com/apk/res-auto">
 4 
 5 
 6     <item
 7         android:icon="@drawable/ic_menu_add"
 8         android:id="@+id/action_add"
 9         android:orderInCategory="100"
10         android:title="Add"
11         app:showAsAction="ifRoom"/>
12     <item
13         android:icon="@drawable/ic_menu_delete"
14         android:id="@+id/action_delete"
15         android:orderInCategory="100"
16         android:title="Delete"
17         app:showAsAction="ifRoom"/>
18 
19     <item
20         android:id="@+id/action_list"
21         android:orderInCategory="100"
22         android:title="ListView"
23         app:showAsAction="never"/>
24     <item
25         android:id="@+id/action_grid"
26         android:orderInCategory="100"
27         android:title="GridView"
28         app:showAsAction="never"/>
29 
30     <item
31         android:id="@+id/action_grad_hor"
32         android:orderInCategory="100"
33         android:title="HorizontalGridView"
34         app:showAsAction="never"/>
35 
36     <item
37         android:id="@+id/action_staggered"
38         android:orderInCategory="100"
39         android:title="StaggeredGridView"
40         app:showAsAction="never"/>
41 
42     <item
43         android:id="@+id/setting"
44         android:orderInCategory="100"
45         android:title="Setting"
46         app:showAsAction="never"/>
47 
48 </menu>

 5.2【布局切换】

5.3【水平的recycleView出现了问题】

【原因】分割线的类出现了问题;

 

 【修改】直接指定maigin,宽度设置为固定的值;分割线的类不再使用;

【实现的效果】

6.瀑布流效果的实现

6.1 动态实现适配器的高度的值 

【说明】瀑布流就是动态的控制item的高度不一致,此处使用随机数;

 1 package com.example.shang.recyclerviewtest;
 2 
 3 import android.content.Context;
 4 import android.view.ViewGroup;
 5 
 6 import java.util.ArrayList;
 7 import java.util.List;
 8 
 9 // 直接继承前面的adapter,不用再写那个回调接口,而且代码也变简洁了
10 public class StaggeredAdapter extends MyViewAdapter{
11 
12 
13     private List<Integer>mHeights;
14 
15     public StaggeredAdapter(Context context, List<String>datas){
16         super(context,datas);
17 
18         mHeights = new ArrayList<>();
19         for (int i = 0; i<mDatas.size();i++){
20             mHeights.add((int) (100+Math.random()*300));
21         }
22     }
23 
24 
25     @Override
26     public void onBindViewHolder(MyViewHolder holder, int position) {
27         holder.mItemTX.setText(mDatas.get(position));
28         ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();
29         lp.height = mHeights.get(position);
30         holder.itemView.setLayoutParams(lp);
31 
32 
33         setUpItemEvent(holder);
34     }
35 
36 
37 
38 }

6.2 activity的设置 

【源码】RecyclerViewTest-master\app\src\main\java\com\example\shang\recyclerviewtest\StaggeredActivity.java

 1 package com.example.shang.recyclerviewtest;
 2 
 3 import android.content.Intent;
 4 import android.os.Bundle;
 5 import android.support.v7.app.AppCompatActivity;
 6 import android.support.v7.widget.GridLayoutManager;
 7 import android.support.v7.widget.LinearLayoutManager;
 8 import android.support.v7.widget.RecyclerView;
 9 import android.support.v7.widget.StaggeredGridLayoutManager;
10 import android.view.Menu;
11 import android.view.MenuItem;
12 import android.view.View;
13 
14 import java.util.ArrayList;
15 import java.util.List;
16 
17 public class StaggeredActivity extends AppCompatActivity {
18 
19     private RecyclerView mRecyclerView;
20     private List<String> mDatas;
21     private StaggeredAdapter myAdapter;
22 
23     @Override
24     protected void onCreate(Bundle savedInstanceState) {
25         super.onCreate(savedInstanceState);
26         setContentView(R.layout.activity_main);
27         initDatas();
28         initView();
29         myAdapter = new StaggeredAdapter(this,mDatas);
30         // 记得recycleView需要layoutManager的支持,否则应用虽不会崩溃,但是显示空白
31         //mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
32         mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
33 
34         //Context context, int spanCount(数量), int orientation(方向), boolean reverseLayout(是否反转)
35          //  mRecyclerView.setLayoutManager(new GridLayoutManager(this,3, GridLayout.VERTICAL,false));
36         //DividerItemDecoration在包package android.support.v7.widget已经有了,不用再去复制了
37         //mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
38         mRecyclerView.setAdapter(myAdapter);
39     }
40 
41     private void initView() {
42         mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerView);
43     }
44 
45     private void initDatas() {
46         mDatas = new ArrayList<>();
47         for (int i = 'A';i<='z';i++){
48             mDatas.add(""+(char)i);
49         }
50     }
51 
52     @Override
53     public boolean onCreateOptionsMenu(Menu menu) {
54         getMenuInflater().inflate(R.menu.menu,menu);
55         return true;
56     }
57 
58     @Override
59     public boolean onOptionsItemSelected(MenuItem item) {
60 
61 //        int id = item.getItemId();
62 //        switch (id){}
63 
64         return super.onOptionsItemSelected(item);
65 
66     }
67 }

 

 

 

 

7.recycleView增加和删除动画

7.1 menu的添加

【项目中添加图片资源】

【增加逻辑】

 

posted @ 2018-04-28 10:27  OzTaking  阅读(417)  评论(0)    收藏  举报