Encontrar el offset superior del primer elemento visible en un RecyclerView

Tengo un RecyclerView + LinearLayoutManger que está utilizando un adaptador que contiene mensajes de chat. Limito el número de mensajes de chat a los más recientes. Este problema es que cuando quito los chats antiguos, la posición de desplazamiento de los chats en el recyclerview cambia porque el índice 0 fue eliminado. Empecé a escribir el siguiente código:

int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition(); View v = layoutManager.getChildAt(firstVisiblePosition); if (firstVisiblePosition > 0 && v != null) { int offsetTop = //need to get the view offset here; chatAdapter.notifyDataSetChanged(); if (firstVisiblePosition - 1 >= 0 && chatAdapter.getItemCount() > 0) { layoutManager.scrollToPositionWithOffset(firstVisiblePosition - 1, offsetTop); } } 

Pensé que sería fácil obtener el desplazamiento visible de la primera posición del elemento visible. Ex. Si la primera vista visible es 300dp pero sólo los últimos 200dp es visible, me gustaría obtener el 100 offset.

De esta manera podría usar scrollToPositionWithOffset (firstVisiblePosition – 1, offsetTop).

¿Me estoy perdiendo de algo? Esto parece que sería un problema fácil de averiguar, pero no he visto ningún método que apoye esto.

@Cinta negra. Gracias por conseguirme en el camino correcto.

La compensación que necesitaba era en realidad sólo v.getTop ();

Mi verdadero problema fue en getChildAt (). Aparentemente getChildAt comienza en la primera posición visible, no en la posición del adaptador. La documentación está mal escrita en este caso.

Aquí está el código resultante.

 int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition(); View v = layoutManager.getChildAt(0); if (firstVisiblePosition > 0 && v != null) { int offsetTop = v.getTop(); chatAdapter.notifyDataSetChanged(); if (firstVisiblePosition - 1 >= 0 && chatAdapter.getItemCount() > 0) { layoutManager.scrollToPositionWithOffset(firstVisiblePosition - 1, offsetTop); } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.