强大的滚动控件——RecyclerView(三)瀑布流效果

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
效果图
这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章