利用RecyclerView实现特殊布局
大家都知道竖直方向的GridLayout效果,可以利用GridLayoutManager设置每个条目的跨度来很容易的实现横向占两个跨度的效果,如图:
[AppleScript] 纯文本查看 复制代码 GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return position % 3 == 0 ? 2 : 1;
}
});
但是竖直方向GridLayout,并且实现竖直方向跨两格的效果似乎有点难度。
我们知道用RecyclerView可以很容易的利用StaggeredGridLayoutManager实现瀑布流的效果。瀑布流就是错落有致。我们实现的思路就是用StaggeredGridLayoutManager来实现这个效果,只是让他错落的有点规律而已。
在Adapter中初始化view的时候,判断当前的位置来动态的设置item的高度:
[AppleScript] 纯文本查看 复制代码 @Override
public void onBindViewHolder(ItemHolder holder, int position) {
if (position % 3 == 0) {
holder.tv.setHeight(100);
} else {
holder.tv.setHeight(49);
}
holder.tv.setBackgroundColor(mContext.getResources().getColor(R.color.colorLine));
holder.setText(mItems.get(position));
}
设置item高度时,要注意那两个小的item的高度相加并且加上他们中间的距离正好等于大的item的高度
[AppleScript] 纯文本查看 复制代码 public class ConnectorDecoration extends RecyclerView.ItemDecoration {
public ConnectorDecoration(Context context) {
super();
}
/*
设置每个item之间的边距
*/
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.set(1, 1, 1, 1);
}
}
|