精準(zhǔn)計(jì)算RecyclerView滑動(dòng)距離

最近遇到需求,要計(jì)算RecyclerView滑動(dòng)距離,用提供的computeVerticalScrollOffset()方法得到的值不是很準(zhǔn)確。是基于item的平均高度算得,如果列表中item高度一致可以用此方法。問題來了,我的應(yīng)用場景是各item高度不一,這時(shí)就只能另找方法了。

簡單粗暴,直接上代碼:

public class OffSetLinearLayoutManager extends LinearLayoutManager {

public OffSetLinearLayoutManager(Context context) {
    super(context);
}

private Map<Integer, Integer> heightMap = new HashMap<>();

@Override
public void onLayoutCompleted(RecyclerView.State state) {
    super.onLayoutCompleted(state);
    int count = getChildCount();
    for (int i = 0; i < count; i++) {
        View view = getChildAt(i);
        if (view != null) {
            heightMap.put(getPosition(view), view.getHeight());
        }
    }
}

public int computeVerticalScrollOffsetExact() {
    if (getChildCount() == 0) {
        return 0;
    }
    try {
        int firstVisiablePosition = findFirstVisibleItemPosition();
        if (firstVisiablePosition == -1) {
            return 0;
        }
        View firstVisiableView = findViewByPosition(firstVisiablePosition);
        int offsetY = -(int) (firstVisiableView.getY());
        for (int i = 0; i < firstVisiablePosition; i++) {
            offsetY += heightMap.get(i) == null ? 0 : heightMap.get(i);
        }
        return offsetY;
    } catch (Exception e) {
        return 0;
    }
}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容