Android Viewpager2与RecycleView

RecycleView简介

Android 5.0 开始,谷歌公司推出了一个用于 大量数据展示的新控件 RecylerView ,可以用来代替
传统的 ListView ,更加强大和灵活。
RecyclerView 是一个强大的滑动组件,与经典的 ListView 相比,同样拥有 item 回收复用的功能,这
一点从它的名字 Recyclerview 即回收 view 也可以看出。
RecyclerView 支持 线性布局 网格布局 瀑布流布局 三种,而且同时还能够控制横向还是纵向滚
动。

 RecycleView纵向排列

布局

步骤就是
1. 在主布局中引入控件
2. 编写好子项布局
布局第一步 :主要是在主布局中引入 RecyclerView 控件。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rv_show"
        />
</LinearLayout>
布局第二步 :创建子布局,然后在子布局中,写好自己的子项布局(需要新建 .xml 的文件)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:background="#15D2EA"
    android:padding="10dp"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/img_zys"
        android:layout_width="50dp"
        android:layout_height="50dp"
        />
    <TextView
        android:id="@+id/tv_zys"
        android:layout_width="50dp"
        android:gravity="center"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

代码

步骤就是
1. 编写实体类
2. 创建适配器
3. 在主活动中使用
代码第一步 :编写实体类
这个主要是看你想做一个怎么样的项目来定,在本课程,做一个左边显示图标图片,右边显示名字的简
单项目,就需要名字与图片 id
public class Zys {
    int img_zys;
    String tv_zys;

    public Zys(int img_zys, String tv_zys) {
        this.img_zys = img_zys;
        this.tv_zys = tv_zys;
    }

    public int getImg_zys() {
        return img_zys;
    }

    public String getTv_zys() {
        return tv_zys;
    }
}

然后创建适配器

public class ZysAdapter extends RecyclerView.Adapter<ZysAdapter.ViewHolder> {
    private List<Zys> list;

    public ZysAdapter(List<Zys> list) {
        this.list = list;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.zys_item, parent, false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Zys zys = list.get(position);
        holder.img_zys.setImageResource(zys.getImg_zys());
        holder.tv_zys.setText(zys.getTv_zys());
        holder.img_zys.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(), zys.getImg_zys()+"被点击", Toast.LENGTH_SHORT).show();
            }
        });
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView img_zys;
        TextView tv_zys;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            img_zys=itemView.findViewById(R.id.img_zys);
            tv_zys=itemView.findViewById(R.id.tv_zys);
        }
    }
}

然后在主类中使用

public class MainActivity9 extends AppCompatActivity {
    private String[] arr={"壹","贰","叁","肆","伍","陆","柒","捌"};
    private int[] imags={R.mipmap.one,R.mipmap.two,R.mipmap.three,R.mipmap.four,R.mipmap.five,R.mipmap.six,R.mipmap.seven,R.mipmap.eight};
    private List<Zys> list = new ArrayList<>();
    private RecyclerView rv_show;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main9);
        init();
        shou=findViewById(R.id.shou);
        rv_show=findViewById(R.id.rv_show);
        initData();
        ZysAdapter addressAdapter = new ZysAdapter(list);
//此处为线性布局
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        rv_show.setLayoutManager(layoutManager);
        rv_show.setAdapter(addressAdapter);

    }

    private void initData() {
        for (int i = 0; i < arr.length; i++) {
            Zys address=new Zys(imags[i],arr[i]);
            list.add(address);
        }

    }

}

 RecycleView横向排列

只需要在主类中加上如下代码

//此处为线性布局
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(RecyclerView.HORIZONTAL);
        rv_show.setLayoutManager(layoutManager);

RecycleView表格布局

public class MainActivity9 extends AppCompatActivity {
    private String[] arr={"壹","贰","叁","肆","伍","陆","柒","捌"};
    private int[] imags={R.mipmap.one,R.mipmap.two,R.mipmap.three,R.mipmap.four,R.mipmap.five,R.mipmap.six,R.mipmap.seven,R.mipmap.eight};
    private List<Zys> list = new ArrayList<>();
    private RecyclerView rv_show;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main9);
        init();
        shou=findViewById(R.id.shou);

        initData();
        ZysAdapter addressAdapter = new ZysAdapter(list);
        GridLayoutManager layoutManager = new GridLayoutManager(this,4);
        rv_show.setLayoutManager(layoutManager);
        shou.setPageTransformer(compositePageTransformer);
        shou.setAdapter(colororAdapter);

    }

    private void initData() {
        for (int i = 0; i < arr.length; i++) {
            Zys address=new Zys(imags[i],arr[i]);
            list.add(address);
        }

    }

}

Viewpager2

概述
ViewPager2 是基于 RecyclerView 实现的,自然继承了 RecyclerView 的众多优点,并且针对
ViewPager 存在的问题做了优化。
支持垂直方向的滑动且实现极其简单。
完全支持 RecyclerView 的相关配置功能。
支持多个 PageTransformer
支持 DiffUtil ,局部数据刷新和 Item 动画。
支持模拟用户滑动与禁止用户操作。
1. 布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:id="@+id/rel"
    android:layout_height="match_parent">


    <TextView
        android:id="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textSize="24sp"
        android:textStyle="bold" />
</RelativeLayout>
2. Adapter
因为 ViewPager2 是基于 RecyclerView 的,所以在使用上与 RecyclerView 的使用基本一致,而且
Adapter 用的也是 RecyclerView.Adapter
public class ColororAdapter extends RecyclerView.Adapter<ColororAdapter.Holder> {
    private List<Integer> colors;

    public ColororAdapter(List<Integer> colors) {
        this.colors = colors;
    }

    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new Holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.cloror,parent,false));
    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, int position) {
        int i=position%4;
        holder.textView.setText("item"+i);
        holder.con.setBackgroundColor(colors.get(i));
    }

    @Override
    public int getItemCount() {
        return Integer.MAX_VALUE;
    }

    public class Holder extends RecyclerView.ViewHolder {
        RelativeLayout con;
        TextView textView;
        public Holder(@NonNull View itemView) {
            super(itemView);
            con=itemView.findViewById(R.id.rel);
            textView=itemView.findViewById(R.id.textView);
        }
    }
}

主类代码

public class MainActivity9 extends AppCompatActivity {
    private List<Zys> list = new ArrayList<>();
    private RecyclerView rv_show;
    private ViewPager2 shou;
    private List<Integer> colors=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main9);
        init();
        shou=findViewById(R.id.shou);
        ColororAdapter colororAdapter = new ColororAdapter(colors);
        CompositePageTransformer compositePageTransformer = new CompositePageTransformer();
        compositePageTransformer.addTransformer(new MarginPageTransformer(20));
        compositePageTransformer.addTransformer(new ScaleInTransformer());

        shou.setOffscreenPageLimit(1);
        View childAt = shou.getChildAt(0);
        if (childAt!=null && childAt instanceof RecyclerView){
            childAt.setPadding(100,0,100,0);
            ((RecyclerView) childAt).setClipToPadding(false);
        }
        shou.setPageTransformer(compositePageTransformer);
        shou.setAdapter(colororAdapter);
    }

    }
    private void init(){
        colors.add(Color.BLUE);
        colors.add(Color.YELLOW);
        colors.add(Color.GREEN);
        colors.add(Color.RED);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值