Insertando elementos RecyclerView en posición cero - siempre se desplaza hacia arriba

Tengo un estándar bastanteRecyclerView con una verticalLinearLayoutManager. Sigo insertando nuevos elementos en la parte superior y llamo anotifyItemInserted(0).

Quiero que la lista permanezca desplazada a la parte superior; para mostrar siempre la posición 0.

Desde el punto de vista de mis requisitos, laLayoutManager se comporta de manera diferente según la cantidad de elementos.

Mientras todos los elementos caben en la pantalla, se ve y se comporta como esperaba: elnuevo elemento siempre aparece en la parte superior y cambia todo Por debajo de eso

Sin embargo, tan pronto como el no. de elementos excede los límites de RecyclerView,e añaden @ elementos nuevos encima de el actualmente visible, pero elos elementos visibles quedan a la vist. El usuario tiene que desplazarse para ver el elemento más nuevo.

Este comportamiento es totalmente comprensible y está bien para muchas aplicaciones, pero no para una "transmisión en vivo", donde ver lo más reciente es más importante que "no distraer" al usuario con desplazamientos automáticos.

Sé que esta pregunta es casi un duplicado deAgregar nuevo elemento a la parte superior de RecyclerView ... pero todas las respuestas propuestas son meras soluciones alternativas (la mayoría de ellos bastante bueno, es cierto).

Estoy buscando una manera de realmentecambiar este comportamiento. Quiero el LayoutManager paraact exactamente igual, sin importar la cantidad de elementos. Quiero que siempre cambie todos los elementos (al igual que en las primeras adiciones), que no deje de cambiar elementos en algún momento y que se compense desplazando suavemente la lista hacia la parte superior.

Básicamente, nosmoothScrollToPosition, noRecyclerView.SmoothScroller. SubclasesLinearLayoutManager está bien. Ya estoy investigando su código, pero sin suerte hasta el momento, así que decidí preguntar en caso de que alguien ya se haya ocupado de esto. ¡Gracias por cualquier idea!

EDITAR Para aclarar por qué estoy descartando las respuestas de la pregunta vinculada: Principalmente me preocupa la suavidad de la animación.

Nota en el primer GIF dondeItemAnimator está moviendo otros elementos mientras agrega el nuevo, las animaciones de fundido de entrada y movimiento tienen la misma duración. Pero cuando estoy "moviendo" los elementos mediante un desplazamiento suave, yo no puede controlar fácilmente la velocidad del desplazamiento. Incluso con el predeterminadoItemAnimator duraciones, esto no se ve tan bien, pero en mi caso particular, incluso necesitaba reducir la velocidad deItemAnimator duraciones, lo que lo hace aún peor:

Respuestas a la pregunta(2)

Su respuesta a la pregunta