Кастомный RecyclerView LayoutManager не швыряется (плавно)

Я работаю над приложением, которое выглядит примерно так:

введите здесь описание изображения

RecyclerView использует пользовательский LayoutManager с пользовательской реализацией «scrollVerticallyBy».

Первый из. Масло прокрутки recyclerview гладкое и рендерится быстрее, чем требуемые 16 мс. Я думаю, что могу максимизировать около 5 мс на Nexus 5.

Однако я также хочу иметь возможность прокручивать RecyclerView, касаясь представления над ним (это RelativeLayout).

Вот проблема:

1) Если я просто перешлю onTouchEvents, прокрутка будет гладкой. Однако RecyclerView.fling(...) никогда не вызывается, и прокрутка работает только до тех пор, пока палец касается экрана. Нет швыряния, что очень неловко.

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

2) Если я переопределяю .fling(...) в RecyclerView, я могу заставить работать "fling" с помощью 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() и заставляю свое приложение многократно вызывать scrollBy() с помощью Scroller, прокрутка работает по-другому.

Я подозреваю, что это может иметь какое-то отношение к «startSmoothScroll» и «smoothScrollToPosition», которые я не перезаписал. Честно говоря, я не знаю, что такое плавная прокрутка, но это звучит актуально для этой проблемы :)


person Markus    schedule 27.01.2015    source источник
comment
Вы нашли решение этой проблемы?   -  person user1136881    schedule 19.10.2015