Centrar un ListView en su selección actual

¿Alguien sabe de una manera de centrar un ListView basado en su selección actual o conjunto de selección con setSelection?

He visto esta otra pregunta StackOverflow sin respuestas: Android ListView selección del centro

Gracias, Kevin

No he probado nada de esto, pero basándome en la selección actual, ¿podrías usar public void smoothScrollByOffset (int offset) para que la vista se desplace hasta donde quieras para que tu selección esté en el centro de la vista?

Primero, obtenga la altura del ListView usando getHeight, que devuelve la altura del ListView en píxeles.

A continuación, obtenga la altura de la vista de la fila utilizando el mismo método.

A continuación, use setSelectionFromTop y pase por la mitad de la altura de ListView menos la mitad de la altura de la fila.

Algo como:

 int h1 = mListView.getHeight(); int h2 = v.getHeight(); mListView.setSelectionFromTop(position, h1/2 - h2/2); 

O, en lugar de hacer las matemáticas, sólo puede elegir una constante para el desplazamiento desde la parte superior, pero creo que podría ser más frágil en diferentes dispositivos, ya que el segundo argumento para setSelectionFromTop parece estar en píxeles en lugar de píxeles independientes del dispositivo.

No he probado este código, pero debería funcionar siempre y cuando sus filas tengan aproximadamente la misma altura.

Tendrá que tener la vista de desplazamiento y la vista del elemento seleccionado. Entonces usted puede simplemente hacer:

 scrollView.smoothScrollTo(0, selectedView.getTop() - (scrollView.getHeight() / 2) + (selectedView.getHeight() / 2), 0); 

Esto centrará la vista de desplazamiento exactamente en selectedView

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