自定义RecyclerView LayoutManager不会(顺利)

时间:2015-01-27 12:33:49

标签: android android-layout scroll smooth-scrolling android-recyclerview

我正在开发一个看起来像这样的应用程序:

enter image description here

RecyclerView使用自定义LayoutManager,自定义实现" scrollVerticallyBy"

第一个。 recyclerview滚动黄油平滑并且以低于所需的16毫秒的方式呈现。我想我可以在Nexus 5上大约5毫秒。

但是,我还希望能够滚动RecyclerView触摸它上面的View(它是一个RelativeLayout)。

问题在于:

1)如果我只是转发onTouchEvents,滚动就会变得平滑。但是,只有在手指触摸屏幕时,才会调用RecyclerView.fling(...)并且只能滚动。没有投掷感觉非常尴尬。

@Override
     public boolean onTouchEvent(MotionEvent event) {
    return mRecyclerView.onTouchEvent(event);
}

2)如果我在RecyclerView中覆盖.fling(...),我可以得到" flinging"使用Scroller工作。这有效,但确实会导致一些奇怪的大滞后。

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    if (mScroller.computeScrollOffset()) {
        Log.d("RecyclerView", "(ondraw) Y: " + mScroller.getCurrY());
        scrollBy(0, mScroller.getCurrY()- mLastY);
        mLastY = mScroller.getCurrY();
        postInvalidateDelayed(16); // 60 Hz
    }
}


@Override
public boolean fling(int velocityX, int velocityY) {
    mLastY = 0;
    mScroller.fling(0, 0, velocityX, velocityY, 0, 0, -10000 ,10000);
    return true;
} 

我不确定这样做的正确方法是什么。我觉得如果我没有覆盖.fling()并强制我的应用程序通过使用Scroller重复调用scrollBy()滚动工作方式不同。

我怀疑这可能与" startSmoothScroll"和" smoothScrollToPosition"我没有覆盖。老实说,我不知道平滑滚动是什么,但这听起来与这个问题有关:)

0 个答案:

没有答案