Hacer un ListView rebotando en Android

Estoy tratando de hacer mi listview "rebote". Para explicarme, quiero que ListView tenga el mismo comportamiento que el objeto de vista de lista de iOs. En la parte superior y en la parte inferior de la lista, el usuario puede pasar por la lista pasando su dedo.

Ese comportamiento existía en los dispositivos Android 2.2 de Samsung (Galaxy Tab GT1000 por ejemplo).

En la mayoría de los dispositivos que he probado, la lista ahora está actuando diferente en el desplazamiento, que muestra una línea azul que obtiene más brillante cuando deslizar el dedo por otra parte.

He encontrado el BounceListView como éste:

public class BounceListView extends ListView { private static final int MAX_Y_OVERSCROLL_DISTANCE = 200; private Context mContext; private int mMaxYOverscrollDistance; public BounceListView(Context context) { super(context); mContext = context; initBounceListView(); } public BounceListView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; initBounceListView(); } public BounceListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mContext = context; initBounceListView(); } private void initBounceListView() { //get the density of the screen and do some maths with it on the max overscroll distance //variable so that you get similar behaviors no matter what the screen size final DisplayMetrics metrics = mContext.getResources().getDisplayMetrics(); final float density = metrics.density; mMaxYOverscrollDistance = (int) (density * MAX_Y_OVERSCROLL_DISTANCE); } @Override protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { //This is where the magic happens, we have replaced the incoming maxOverScrollY with our own custom variable mMaxYOverscrollDistance; return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, mMaxYOverscrollDistance, isTouchEvent); } } 

Pero el problema de este ListView es que no vuelve al primer o al último elemento después de un desplazamiento sobre la lista … Permanece en una posición donde la lista no está llena.

Alguien tiene una idea para hacer que funcione?

¡Gracias por adelantado!

Debe anular onOverScrolled , que se llama para decir que la lista se ha desplazado en exceso, y en esa función desplazar el ListView nuevo al punto donde lo desea utilizando smoothScrollToPosition .

Parecería algo así:

 @Override protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) { if(scrollY < 0) { smoothScrollToPosition(0); } else if(scrollY > MAX_SCROLL) { smoothScrollToPosition(getAdapter().getCount()); } } 

MAX_SCROLL tendrá que ser determinado por usted utilizando la altura de los elementos de la lista y el número de elementos en su adaptador, aunque parece que ya ha descubierto que en su pregunta por lo que no debería ser un problema.

  • ¿Cómo quitar dinámicamente los elementos de ListView en un clic de botón?
  • Android: deshabilita la selección ListView
  • android listview repitiendo algunos ítems en listitem click event
  • Android ListView: obtener el índice de datos del elemento visible
  • Listview items Animación Parar mientras se desplaza
  • Lista de Android lista completa seleccionada seleccionada
  • ListView: ¿Cómo permanecer resaltado / seleccionado después de pulsar el botón Atrás?
  • ListView setOnItemClickListener no funciona agregando botón
  • ListView: ¿Cómo espero hasta que esté cargado?
  • Visualización de filas vacías en Android listview
  • Preseleccionar elementos en listView Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.