前言:把握生命里的每一分钟,全力以赴我们心中的梦,不经历风雨 怎么见彩虹,没有人能随随便便成功 -----《真心英雄》
系列文章: 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)

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

被折叠的 条评论
为什么被折叠?



