我正在开发一个看起来像这样的应用程序:
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"我没有覆盖。老实说,我不知道平滑滚动是什么,但这听起来与这个问题有关:)