自定义控件三部曲视图篇(六)——RecyclerView系列之三自定义LayoutManager

本文介绍了如何自定义RecyclerView的LayoutManager,通过CustomLayoutManager实现布局管理,并添加滚动效果。详细讲解了onLayoutChildren()方法的使用,以及如何处理滚动到顶部和底部的异常情况,提供了完整的代码示例。

前言:把握生命里的每一分钟,全力以赴我们心中的梦,不经历风雨 怎么见彩虹,没有人能随随便便成功 -----《真心英雄》


系列文章: Android自定义控件三部曲文章索引: http://blog.csdn.net/harvic880925/article/details/50995268


在第一篇中已经讲过,LayoutManager主要用于布局其中的Item,在LayoutManager中能够对每个Item的大小,位置进行更改,将它放在我们想要的位置,在很多优秀的效果中,都是通过自定义LayoutManager来实现的,比如:
在这里插入图片描述 在这里插入图片描述
在这里插入图片描述
可以看到这些效果都非常棒,通过这一节的学习,大家也就理解了自定义LayoutManager的方法,然后再理解这些控件的代码就不再难了。

在这节中,我们先自己制作一个LinearLayoutManager,来看下如何自定义LayoutManager,下节中,我们会通过自定义LayoutManager来制作第一个滚轮翻页的效果。

一、初始化展示界面

1.1 自定义CustomLayoutManager

先生成一个类CustomLayoutManager,派生自LayoutManager:

public class CustomLayoutManager extends LayoutManager {
   
   
    @Override
    public LayoutParams generateDefaultLayoutParams() {
   
   
        return null;
    }
}

当我们派生自LayoutManager时,会强制让我们生成一个方法generateDefaultLayoutParams。
这个方法就是RecyclerView Item的布局参数,换种说法,就是RecyclerView 子 item 的 LayoutParameters,若是想修改子Item的布局参数(比如:宽/高/margin/padding等等),那么可以在该方法内进行设置。
一般来说,没什么特殊需求的话,则可以直接让子item自己决定自己的宽高即可(wrap_content)。
所以,我们一般的写法是:

public class CustomLayoutManager extends LayoutManager {
   
   
    @Override
    public LayoutParams generateDefaultLayoutParams() {
   
   
        return new RecyclerView.LayoutParams(RecyclerView.LayoutParams.WRAP_CONTENT,
                RecyclerView.LayoutParams.WRAP_CONTENT);
    }
}

如果这时候,我们把上节demo中LinearLayoutManager替换下:

public class LinearActivity extends AppCompatActivity {
   
   
    private ArrayList<String> mDatas = new ArrayList<>();

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

        …………
        RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.linear_recycler_view);
        
        mRecyclerView.setLayoutManager(new CustomLayoutManager());

        RecyclerAdapter adapter = new RecyclerAdapter(this, mDatas);
        mRecyclerView.setAdapter(adapter);
    }
    …………
}

运行一下,发现页面完全空白:
在这里插入图片描述

我们说过所有的Item的布局都是在LayoutManager中处理的,很明显,我们目前在CustomLayoutManager中并没有布局任何的Item。当然没有Item出现了。

1.2 onLayoutChildren()

在LayoutManager中,所有Item的布局都是在onLayoutChildren()函数中处理的,所以我们在CustomLayoutItem中添加onLayoutChildren()函数:

@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) 
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值