Android Studio开发——使用RecyclerView实现图片瀑布流+分割线

Android Studio开发——使用RecyclerView实现图片瀑布流+分割线

任务描述:

  • 在上次微信首页的基础上,选择一个Fragment实现RecyclerView控件的设计开发,内容不限。
  • 我选择在“设置”界面中使用RecyclerView实现图片瀑布流及分割线的展示

扩展:RecyclerView的优点

  1. RecyclerView封装了viewholder的回收复用,也就是说RecyclerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不再是View了,复用的逻辑被封装了,写起来更加简单。
  2. 直接省去了listview中convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。
  3. 提供了一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecyclerView专门抽取出了相应的类,来控制Item的显示,使其的扩展性非常强。
  4. 设置布局管理器以控制Item的布局方式,横向、竖向以及瀑布流方式
    例如:你想控制横向或者纵向滑动列表效果可以通过LinearLayoutManager这个类来进行控制(与GridView效果对应的是GridLayoutManager,与瀑布流对应的还StaggeredGridLayoutManager等)。也就是说RecyclerView不再拘泥于ListView的线性展示方式,它也可以实现GridView的效果等多种效果。
  5. 可设置Item的间隔样式(可绘制)
    通过继承RecyclerView的ItemDecoration这个类,然后针对自己的业务需求去书写代码。
  6. 可以控制Item增删的动画,可以通过ItemAnimator这个类进行控制,当然针对增删的动画,RecyclerView有其自己默认的实现。

一、基本过程

1. 引入依赖

implementation 'com.android.support:recyclerview-v7:28.0.0'

==这里注意Android Support库和AndroidX不兼容 ==
解决方法

2. 布局中添加RecyclerView

<android.support.v7.widget.RecyclerView
     android:id="@+id/recycler_view"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />

3.item布局(我这里只放置了一个ImageView控件)

<?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:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:paddingBottom="5dp"
    android:paddingRight="5dp"
    android:background="#E1FFFF">

<ImageView
        android:id="@+id/item_img"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:gravity="center"
        tools:text="item"/>
</LinearLayout>

android:adjustViewBounds="true"
调整ImageView的界限来保持图像纵横比不变。

我原本的目的是为了使图片高度自适应,算是基本实现了,但是一拖动布局就混乱了(后文会放效果图),望指正。

4. Adapter适配器设置

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

    private List<Img> ImgList;
    private Context context;

    static class ViewHolder extends RecyclerView.ViewHolder {
   
        ImageView Image;

        public ViewHolder(View view) {
   
            super(view);
            Image = (ImageView) view.findViewById(R.id.item_img);
//            fruitName = (TextView) view.findViewById(R.id.fruitname);
        }

    }

    public RecyclerViewAdapter(List<Img> List) {
   
        ImgList = List;
    }

    @Override

    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
   
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.itme, parent, false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
   

        final Img img = ImgList.get(position);
        holder.Image.setImageResource(img.getImageId());

    }

5. 在Fragment中初始化RecyclerView

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
   
        // Inflate the layout for this fragment
        View view= inflater.inflate(R.layout.tab04, container, false);
        InitImg();
        RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
        StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(manager);
        RecyclerViewAdapter adapter = new RecyclerViewAdapter(ImgList);
        recyclerView.setAdapter(adapter);
        recyclerView.addItemDecoration(new DividerItemDecoration(
                getActivity(), DividerItemDecoration.BOTH_SET,5,255));
        return view;
    }

    private List<Img> ImgList = new ArrayList<>();

    private void InitImg(){
   
        for (int i 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值