RecyclerView将布局排列交给了LayoutManager,LayoutManager中制定了一套可扩展的接口。
瀑布流的实现是使用了StaggeredGridLayoutManager
首先还是先来修改一下xml中的代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp">
<ImageView
android:id="@+id/fruit_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
<TextView
android:id="@+id/fruit_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_marginTop="10dp"/>
</LinearLayout>
看过我前几章的朋友应该能看出来,我只是在width等地方动了一下
- activity.class
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
FruitAdapter adapter = new FruitAdapter(fruitList);
recyclerView.setAdapter(adapter);
private void initFruit() {
for (int i =0;i<2;i++) {
Fruit apple = new Fruit(getRandomLengthName("a"), R.mipmap.ic_launcher);
fruitList.add(apple);
Fruit banana = new Fruit(getRandomLengthName("banana"), R.mipmap.ic_launcher);
fruitList.add(banana);
Fruit oragen = new Fruit(getRandomLengthName("orange"), R.mipmap.ic_launcher);
fruitList.add(oragen);
Fruit watermelon = new Fruit(getRandomLengthName("watermelon"), R.mipmap.ic_launcher);
fruitList.add(apple);
Fruit pear = new Fruit(getRandomLengthName("pear"), R.mipmap.ic_launcher);
fruitList.add(pear);
Fruit grape = new Fruit(getRandomLengthName("grape"), R.mipmap.ic_launcher);
fruitList.add(grape);
Fruit pineapple = new Fruit(getRandomLengthName("pineapple"), R.mipmap.ic_launcher);
fruitList.add(pineapple);
Fruit strawberry = new Fruit(getRandomLengthName("strawberry"), R.mipmap.ic_launcher);
fruitList.add(strawberry);
Fruit cherry = new Fruit(getRandomLengthName("cherry"), R.mipmap.ic_launcher);
fruitList.add(cherry);
Fruit a = new Fruit("a", R.mipmap.ic_launcher);
fruitList.add(a);
Fruit b = new Fruit("b", R.mipmap.ic_launcher);
fruitList.add(b);
Fruit c = new Fruit("c", R.mipmap.ic_launcher);
fruitList.add(c);
Fruit d = new Fruit("d", R.mipmap.ic_launcher);
fruitList.add(d);
Fruit e = new Fruit("e", R.mipmap.ic_launcher);
fruitList.add(e);
Fruit f = new Fruit("f", R.mipmap.ic_launcher);
fruitList.add(f);
Fruit g = new Fruit("g", R.mipmap.ic_launcher);
fruitList.add(g);
Fruit h = new Fruit("h", R.mipmap.ic_launcher);
fruitList.add(h);
}
}
private String getRandomLengthName (String name){
Random random =new Random();
int length = random.nextInt(20)+1;
StringBuilder builder = new StringBuilder();
for (int i = 0;i < length;i++){
builder.append(name);
}
return builder.toString();
}
在onCreat方法中我们创建了一个StaggeredGridLayoutManager的实例。它接收两个参数,第一个是指定布局的列数,第二个参数用于指定布局的排列方向,传入StaggeredGridLayoutManager.VERTICAL表示让布局纵向排列。
为了使瀑布流更加直观的呈现,使用了getRandomLengthName()这个方法,使用了Random对象来创建一个1到20之间的随机数,然后将参数传入的字符重复随机遍
github地址:https://github.com/skysunlei/RecyclerViewBeat
效果图