Android中RecyclerView设置

每个控件的间距

在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); //亲测

打完收工。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值