recyclerview添加item间距

recyclerview在安卓开发中经常使用,我在开发的时候使用recyclerview的瀑布流来同时播放四个在线视频,2行2列,视频间距需要有1px的空白,需要继承  RecyclerView.ItemDecoration,重写它的getItemOffsets函数,全部代码如下:

import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;

public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
    private int space;

    public SpaceItemDecoration(int space) {
        this.space = space;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        //不是第一个的格子都设一个左边和底部的间距
        outRect.left = space;
        outRect.bottom = space;

        //由于每行都只有2个,所以第一个都是2的倍数,把左边距设为0
        if (parent.getChildLayoutPosition(view) % 2 == 0) {
            outRect.left = 0;
        }
        if (parent.getChildLayoutPosition(view)  == 2||parent.getChildLayoutPosition(view) ==3) {
            outRect.bottom = 0;
        }
    }
}
然后在activity添加代码:
GridLayoutManager manager = new GridLayoutManager(this, 2, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(manager);
SpaceItemDecoration itemOffsetDecoration = new SpaceItemDecoration(1);
recyclerView.addItemDecoration(itemOffsetDecoration);
initPlayUrlList();
adapter = new RvGridAdapter(this, deviceListBeanList, playUrlList);
recyclerView.setAdapter(adapter);

这里面需要注意下,安卓屏幕的宽高,大部分获取的宽高是activity的宽高,虚拟键和状态栏高度是不包含在内的,所以要考虑下屏幕实际宽高多少,平均分配每个item的宽高,我是在适配器里面的 onBindViewHolder来适配item宽高的:

ViewGroup.LayoutParams params = viewHolder.itemView.getLayoutParams();
params.height = DensityUtils.getScreenH(context) / 2;
params.width = DensityUtils.getScreenRealW(context)/ 2;
viewHolder.itemView.setLayoutParams(params);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

第九区大虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值