Android RecyclerView 瀑布流

 

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="match_parent"
 3     android:layout_height="wrap_content"
 4     android:background="@android:color/holo_blue_light">
 5 
 6     <ImageView
 7         android:id="@+id/iv"
 8         android:layout_width="match_parent"
 9         android:layout_height="wrap_content"
10         android:gravity="center"
11         android:padding="10dp"
12         android:src="@mipmap/ic_launcher"
13         android:scaleType="fitXY"
14         android:adjustViewBounds="true"/>
15 
16 </LinearLayout>
item_layout.xml

导入RecyclerView包

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:id="@+id/activity_main"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent">
 5 
 6     <android.support.v7.widget.RecyclerView
 7         android:id="@+id/recyclerview"
 8         android:layout_width="match_parent"
 9         android:layout_height="match_parent">
10 
11     </android.support.v7.widget.RecyclerView>
12 </RelativeLayout>
activity_main.xml
 1 public class MainActivity extends AppCompatActivity {
 2 
 3     RecyclerView mRecycleView;
 4     List<Image> mList = new ArrayList<>();
 5 
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10 
11         mRecycleView = (RecyclerView) findViewById(R.id.recyclerview);
12         //初始化数据
13         initData();
14         //设置适配器
15         mRecycleView.setAdapter(new MyAdapter());
16         //设置布局管理器
17         //mRecycleView.setLayoutManager(new LinearLayoutManager(this));//与ListView类似
18         mRecycleView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
19         //设置item分割线
20 
21         //设置item动画
22     }
23 
24 
25     private void initData() {
26         for (int i = 1; i <= 20; i++) {
27             try {
28 
29                 mList.add(new Image(R.mipmap.class.getField("img0"+i).getInt(null)));
30 
31             } catch (IllegalAccessException e) {
32                 e.printStackTrace();
33             } catch (NoSuchFieldException e) {
34                 e.printStackTrace();
35             }
36         }
37 
38 
39     }
40 
41 
42     //布局的内容组件
43     class MyViewHolder extends RecyclerView.ViewHolder{
44 
45         ImageView iv;
46 
47         public MyViewHolder(View itemView) {
48             super(itemView);
49             iv = (ImageView) itemView.findViewById(R.id.iv);
50         }
51     }
52 
53     //适配器,继承RecyclerView.Adapter,泛型,里面必须是Recycler.ViewHolder的子类
54     class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
55 
56         /**
57          * 一个页面没有加载完毕,会持续调用该方法。
58          * @param parent
59          * @param viewType
60          * @return
61          */
62         @Override
63         public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
64             //创建ViewHolder
65             //导入布局
66             View layout = View.inflate(getBaseContext(),R.layout.item_layout,null);
67             MyViewHolder viewHolder = new MyViewHolder(layout);
68             return viewHolder;
69         }
70 
71         @Override
72         public void onBindViewHolder(MyViewHolder holder, int position) {
73             //为每一个布局设置属性。
74             //holder  组件
75             //当前第几项, mList.get(position)拿到数据,给holder设置
76 
77             holder.iv.setImageResource(mList.get(position).imgId);
78         }
79 
80         @Override
81         public int getItemCount() {
82             return mList.size();
83         }
84     }
85 
86     class Image{
87         int imgId;
88         public Image(int imgId){
89             this.imgId = imgId;
90         }
91     }
92 }
MainActivity.java
原文地址:https://www.cnblogs.com/Claire6649/p/5998231.html