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);