android 瀑布流

最终效果图

1.item_demo5.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingBottom="5dp"
    android:paddingRight="5dp">


    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scaleType="fitXY"
        android:id="@+id/item_demo5_image"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/item_demo5_tv"
        android:layout_margin="5dp"
        android:background="#ff496b"
        android:text="12344"

        />


</LinearLayout>

 Demo5Adapter

public class Demo5Adapter extends RecyclerView.Adapter<Demo5Adapter.ViewHolder> {


    /**
     * 展示数据
     */
    private ArrayList<String> mData;


    public Demo5Adapter(ArrayList<String> data) {
        this.mData = data;
    }

    public void updateData(ArrayList<String> data) {
        this.mData = data;
        notifyDataSetChanged();
    }
    @Override
    public int getItemViewType(int position) {
        // 瀑布流样式外部设置spanCount为2,在这列设置两个不同的item type,以区分不同的布局
        return position % 2;
    }




    @Override
    public Demo5Adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        parent = parent;
        // 实例化展示的view
        View v;
//        if(viewType == 1) {
            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_demo5, parent, false);
//        }
//        else {
//            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_rv_staggered_item_two, parent, false);
//        }
        // 实例化viewholder
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;



    }

    @Override
    public void onBindViewHolder(Demo5Adapter.ViewHolder holder, int position) {
// 绑定数据
        holder.mTv.setText(mData.get(position));
        int type = position % 2;
        if(type == 0){
            holder.imageView.setBackgroundResource(R.drawable.a);
        }else {
            holder.imageView.setBackgroundResource(R.drawable.ic_launcher);
        }

    }

    @Override
    public int getItemCount() {
        return this.mData.size();
    }


    public static class ViewHolder extends RecyclerView.ViewHolder {

        TextView mTv;
       ImageView imageView;

        public ViewHolder(View itemView) {
            super(itemView);

            mTv = (TextView) itemView.findViewById(R.id.item_demo5_tv);
            imageView = (ImageView)itemView.findViewById(R.id.item_demo5_image);


        }
    }
}

 activity_demo5.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.mac.mainapplication.Activity.Demo5Activity">


    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        android:paddingLeft="5dp"
        android:paddingTop="5dp"
        android:fadeScrollbars="true"
        android:id="@+id/demo5_recycler_view">


    </android.support.v7.widget.RecyclerView>

</LinearLayout>

 主界面代码

public class Demo5Activity extends AppCompatActivity {

    private StaggeredGridLayoutManager mLayoutManager;
    private RecyclerView mRecyclerView;
    private  ArrayList<String> data = new ArrayList<>();

    private Demo5Adapter adapter;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo5);


        mLayoutManager = new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL);
        mRecyclerView = (RecyclerView)findViewById(R.id.demo5_recycler_view);
        mRecyclerView.setLayoutManager(mLayoutManager);

        adapter = new Demo5Adapter(getData());
        mRecyclerView.setAdapter(adapter);
    }

    private ArrayList<String> getData() {


        final Random random=new Random();;

        String []strArr = {"差不多完美的解决了间隔线的问题,有细心的同学可能发现,在RecyclerView滑动的时候上面一直有一条灰色的间隔线,这个可以通过取消xml布局文件中RecyclerView的paddingTop属性去掉顶部灰色的间隔线。"
                ,"总结","本篇文章主要介绍网格样式和瀑布流样式的RecyclerView,列表样式、网格样式和瀑布流样式在某种程度上是可以转换的。"
                ,"网格样式的布局管理器的spanCount设置为1,就是列表样式",
                "目前为止关于RecyclerView的基本使用的介绍可以告一段落了,但其实关于RecyclerView深入使用可不止着一些,比如说单个Item横滑,拖动Item之间转换位置等等,官方都有提供,当然这些使用会在后面依次介绍。",
                "我是好人","就是水平方向的列表","如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!"
                ,"竖直方向","Item是等宽,水平方向,那就是水平方向的网络样式","1","飞哥陪我过;歌撇根基稳固拼q"};

        for(int i = 0; i < 100; i++) {
            data.add(strArr[random.nextInt(strArr.length)]);
        }
        return data;
    }



}
原文地址:https://www.cnblogs.com/hualuoshuijia/p/7059534.html