每个控件的间距
在RecyclerVie中存在一个方法,是用以设置每个item之间的间距的:addItemDecoration(); 传的是一个ItemDecoration对象, 而一般我们使用的话可以直接继承ItemDecoration复写相关方法就可以了代码如下:
public class MyItemDecoration extends RecyclerView.ItemDecoration {
private int mFirstSpace; //第一个的
private int mOtherSpace; //其他
public MyItemDecoration(int firstSpace, int otherSpace){
this.mFirstSpace = firstSpace;
this.mOtherSpace = otherSpace;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
if(parent.getChildLayoutPosition(view) == 0){
//当是第一个Item的时候 距离上面多少距离,相当于在Item的根布局加上margin参数
outRect.top = mFirstSpace;
}else{
//其他的(非第一个Item的效果)
outRect.top = mOtherSpace;
}
}
}
使用如下:
mRecyclerView.addItemDecoration(new MyItemDecoration(
MeasureUtils.dip2px(this, 39),
MeasureUtils.dip2px(this, 10)));
其中MeasureUtils是我自己的换算方法,把px转换成dp
效果图如下:
可以非常明显的看到,第一个Item距顶部的距离与之后其他是不一样的
RecyclerView设置启动动画:
使用LayoutAnimation设置, 具体方法可自行百度, 不过:
1. 该方法默认情况下只有第一次有效, 如果哪一次需要该动画:
recyclerView.getAdapter.notifyDataSetChanged();
recyclerView.scheduleLayoutAnimation();
RecyclerView杂记:
- LinearLayoutManager中有一个比较有意思的方法,也是我一直想找的方法:smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,int position);
使用方法如下:
mManager.smoothScrollToPosition(mRecyclerView, null, 0);
其中0为滑动到的position为0的位置。
- LinearLayoutManger还有另外一个方法:findFirstVisibleItemPosition();官方原话是:
Returns the adapter position of the first visible view
, 就是找到当前在页面上adapter能看到的第一个item的position, 很实用的小方法。 - RecyclerView的ViewHolder自带一个itemView变量, 不要傻乎乎的去获取根Item
- android.support.v4.widget.NestedScrollView与Recycler View一起用的话, recycler View貌似可以用一种特别的方式禁止滑动:
mRecyclerTimeline.setNestedScrollingEnabled(false); //亲测
打完收工。