首页 > 系统 > Android > 正文

Android学习之RecyclerView学习(实现瀑布流式布局)

2019-11-09 15:40:38
字体:
来源:转载
供稿:网友

RecyclerView,大家可以通过导入support-v7对其进行使用。 

如果使用AndroidStudio开发, 需要在build.gradle中添加:

compile 'com.android.support:appcompat-v7:24.2.1'compile 'com.android.support:design:24.2.1'

据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:ListView、GridView。

整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。

控制其显示的方式,请通过布局管理器LayoutManager

控制Item间的间隔(可绘制),请通过ItemDecoration

控制Item增删的动画,请通过ItemAnimator

控制点击、长按事件(暂不支持)

RecyclerView的使用代码:

mRecyclerView = findView(R.id.id_recyclerview);//设置布局管理器 mRecyclerView.setLayoutManager(layout);//设置adaptermRecyclerView.setAdapter(adapter)//设置Item增加、移除动画mRecyclerView.setItemAnimator(new DefaultItemAnimator());//添加分割线mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.HORIZONTAL_LIST));

RecyclerView.LayoutManager吧,这是一个抽象类,好在系统提供了3个实现类:

LinearLayoutManager 现行管理器,支持横向、纵向。

GridLayoutManager 网格布局管理器

StaggeredGridLayoutManager 瀑布就式布局管理器

RecyclerView提供自己的adapter:RecyclerView.Adapter,该适配器已经集成了ViewHolder类,只需要实现里面的onCreateViewHolder、onBindViewHolder抽象方法,具体使用如下:
package com.lzy.host.perfect.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import com.lzy.host.perfect.R;import java.util.List;/** * RecyclerViewAdapter * * @author linzhiyong * @time 2017年2月8日15:17:41 * @email wflinzhiyong@163.com * @desc */public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {    PRivate Context context;    private List<Integer> data;    public RecyclerViewAdapter(Context context, List<Integer> data) {        this.context = context;        this.data = data;    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_recyclerview, parent, false));        return holder;    }    @Override    public void onBindViewHolder(MyViewHolder holder, int position) {        holder.imageView.setImageResource(this.data.get(position));        if (position % 2 == 0) {            holder.imageView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 300));        } else {            holder.imageView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 400));        }    }    @Override    public int getItemCount() {        return this.data.size();    }    class MyViewHolder extends RecyclerView.ViewHolder {        private ImageView imageView;        public MyViewHolder(View itemView) {            super(itemView);            this.imageView = (ImageView) itemView.findViewById(R.id.imageView1);        }    }}Activity:
package com.lzy.host.perfect.demo;import android.os.Bundle;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.widget.TextView;import com.lzy.host.perfect.R;import com.lzy.host.perfect.activity.BaseActivity;import com.lzy.host.perfect.adapter.RecyclerViewAdapter;import java.util.ArrayList;import java.util.List;/** * RecyclerView * * @author linzhiyong * @time 2017年2月8日15:17:41 * @email wflinzhiyong@163.com * @desc */public class RecyclerViewActivity extends BaseActivity {    private TextView topTitleView;    private RecyclerView recyclerView;    private RecyclerViewAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_demo_recyclerview);        topTitleView = (TextView) findViewById(R.id.base_top_title);        topTitleView.setText("RecyclerView");        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);        adapter = new RecyclerViewAdapter(this, createData());        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL));        recyclerView.setAdapter(adapter);    }    private List<Integer> createData() {        List<Integer> data = new ArrayList<Integer>();        for (int i = 0; i < 100; i++) {            if (i % 2 == 0) {                data.add(R.mipmap.ic_demo_circle);            } else {                data.add(R.mipmap.ic_address_male);            }        }        return data;    }}布局文件:
<?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="match_parent"    android:orientation="vertical">    <include layout="@layout/base_top_title" />    <android.support.v7.widget.RecyclerView        android:id="@+id/recyclerView"        android:layout_width="match_parent"        android:layout_height="match_parent">    </android.support.v7.widget.RecyclerView></LinearLayout>适配器item布局文件:
<?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:padding="5dp">    <ImageView        android:id="@+id/imageView1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:scaleType="centerCrop" /></LinearLayout>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表