美文网首页
RecyclerView 自动换行layoutManager

RecyclerView 自动换行layoutManager

作者: Solang | 来源:发表于2017-09-12 09:58 被阅读1526次
    /**
     * Created by Solang on 2017/7/21.
     */
    
    public class AutoLineFeedLayoutManager extends RecyclerView.LayoutManager {
        @Override
        public RecyclerView.LayoutParams generateDefaultLayoutParams() {
            return new RecyclerView.LayoutParams(
                    RecyclerView.LayoutParams.WRAP_CONTENT,
                    RecyclerView.LayoutParams.WRAP_CONTENT);
        }
    
        @Override
        public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
            detachAndScrapAttachedViews(recycler);
    
            int sumWidth = getWidth();
    
            int curLineWidth = 0, curLineTop = 0;
            int lastLineMaxHeight = 0;
            for (int i = 0; i < getItemCount(); i++) {
                View view = recycler.getViewForPosition(i);
    
                addView(view);
                measureChildWithMargins(view, 0, 0);
                int width = getDecoratedMeasuredWidth(view);
                int height = getDecoratedMeasuredHeight(view);
    
                curLineWidth += width;
                if (curLineWidth <= sumWidth) {//不需要换行
                    layoutDecorated(view, curLineWidth - width, curLineTop, curLineWidth, curLineTop + height);
                    //比较当前行多有item的最大高度
                    lastLineMaxHeight = Math.max(lastLineMaxHeight, height);
                } else {//换行
                    curLineWidth = width;
                    if (lastLineMaxHeight == 0) {
                        lastLineMaxHeight = height;
                    }
                    //记录当前行top
                    curLineTop += lastLineMaxHeight;
    
                    layoutDecorated(view, 0, curLineTop, width, curLineTop + height);
                    lastLineMaxHeight = height;
                }
            }
    
        }
    }
    

    相关文章

      网友评论

          本文标题:RecyclerView 自动换行layoutManager

          本文链接:https://www.haomeiwen.com/subject/noaqsxtx.html