遇到scrollview和recycleview时的冲突解决方法

GridGridLayoutManager

package ico.ico.widget.recycler;

import android.content.Context;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

/**
 * Created by ICO on 2016/4/7 0007.
 */
public class AdaptiveGridLayoutManager extends GridLayoutManager {
    protected int mBorderWidth = 0;

    public AdaptiveGridLayoutManager(Context context, int spanCount, int borderWidth) {
        super(context, spanCount);
        this.mBorderWidth = borderWidth;
    }

    public AdaptiveGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout, int borderWidth) {
        super(context, spanCount, orientation, reverseLayout);
        this.mBorderWidth = borderWidth;
    }

    @Override
    public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) {
        int itemCount = state.getItemCount();
        if (itemCount == 0) {
            super.onMeasure(recycler, state, widthSpec, heightSpec);
            return;
        }
        //计算行数
        int rowCount = 1;
        if (itemCount > getSpanCount()) {
            rowCount = itemCount % getSpanCount() > 0 ? itemCount / getSpanCount() + 1 : itemCount / getSpanCount();
        }
        View view = recycler.getViewForPosition(0);
        if (view != null) {
            measureChild(view, widthSpec, heightSpec);
            int measuredWidth = View.MeasureSpec.getSize(widthSpec);
            int measuredHeight = view.getMeasuredHeight();
            setMeasuredDimension(measuredWidth, measuredHeight * rowCount + mBorderWidth * (rowCount - 1));
        }
        super.onMeasure(recycler, state, widthSpec, heightSpec);
    }
}

LinearLayoutManager

package ico.ico.widget.recycler;

import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by ICO on 2016/4/7 0007.
 */
public class AdaptiveLinearLayoutManager extends LinearLayoutManager {
    protected int mBorderWidth = 0;

    public AdaptiveLinearLayoutManager(Context context, int borderWidth) {
        super(context);
        this.mBorderWidth = borderWidth;
    }

    public AdaptiveLinearLayoutManager(Context context, int orientation, boolean reverseLayout, int borderWidth) {
        super(context, orientation, reverseLayout);
        this.mBorderWidth = borderWidth;
    }

    public AdaptiveLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes, int borderWidth) {
        super(context, attrs, defStyleAttr, defStyleRes);
        this.mBorderWidth = borderWidth;
    }

    @Override
    public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) {
        int expandSpec = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                View.MeasureSpec.AT_MOST);
        heightSpec = expandSpec;
        super.onMeasure(recycler, state, widthSpec, heightSpec);
//        int itemCount = getItemCount();
//        if (itemCount == 0) {
//            super.onMeasure(recycler, state, widthSpec, heightSpec);
//            return;
//        }
//        int rowCount = itemCount / getSpanCount() + 1;
//        View view = recycler.getViewForPosition(0);
//        if (view != null) {
//            measureChild(view, widthSpec, heightSpec);
//            int measuredWidth = View.MeasureSpec.getSize(widthSpec);
//            int measuredHeight = view.getMeasuredHeight();
//            setMeasuredDimension(measuredWidth, measuredHeight * rowCount + mBorderWidth * (rowCount - 1));
//        }
    }
}

瀑布流的还没想过,希望大神们指点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值