Personalizar RecyclerView LayoutManager no fling (sin problemas)

Estoy trabajando en una aplicación que se parece algo a esto:

Introduzca aquí la descripción de la imagen

El RecyclerView utiliza un LayoutManager personalizado con una implementación personalizada de "scrollVerticallyBy"

Primero de. El recyclerview desplaza la mantequilla lisa y rinde en la manera menos que los 16 ms requeridos. Creo que puedo max i fuera alrededor de 5 ms en un Nexus 5.

Sin embargo, también quiero ser capaz de desplazar el RecyclerView de tocar la vista anterior (es un RelativeLayout).

Aquí está el problema:

1) Si sólo envío el onTouchEvents el desplazamiento es la mantequilla suave. Sin embargo, RecyclerView.fling (…) nunca se invoca y el desplazamiento sólo funciona siempre y cuando el dedo toque la pantalla. No flinging que se siente muy incómodo.

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

2) Si anula .fling (…) en el RecyclerView puedo obtener "flinging" para trabajar usando un Scroller. Esto funciona, pero causa algunos extraños grandes retrasos.

 @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; } 

No estoy seguro de cuál es la forma correcta de hacerlo. Me siento así si no estoy anulando .fling () y obligar a mi aplicación a llamar repetidamente scrollBy () utilizando el Scroller el desplazamiento está funcionando de manera diferente.

Sospecho que esto puede tener algo que ver con "startSmoothScroll" y "smoothScrollToPosition" que no he sobrescrito. Honestamente no sé lo que smoothscrolling es, pero suena relevante para este problema 🙂

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.