A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



利用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);
        }
    }

游客,如果您要查看本帖隐藏内容请回复

13 个回复

倒序浏览
您需要登录后才可以回帖 登录 | 加入黑马