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).
- SetOnItemClickListener en ListView personalizado
- Android deshabilitar los elementos de vista de lista
- Agregar botón a cada fila de la vista de lista
- Cómo obtener los elementos de lista siguiente y anterior de un listview en android
- SetEmptyView en ListView no mostrar su vista en una aplicación para Android
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!
- Android: Actualizar ListView Items cada 1 minuto
- Las filas Listview ordenan cambios al azar en el desplazamiento de listview en android
- Encabezado estático en ListView, CustomBaseAdapter
- Elemento expandible en la lista de Android
- Android: listview item width fill_parent no funciona
- No se puede establecer el color cuando android: state_enabled = "false"
- Cómo obtener datos de MySQL con dos fechas diferentes en android y mostrar en Multi Column ListView
- Cómo arredondar las esquinas del elemento de lista en la parte superior e inferior de la vista de lista? (No sólo para las partes superior e inferior)
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.
- La dosis de Android Html.fromHtml () no funciona correctamente en estilo de texto anidado
- Utils.bitmapToMat bloqueo de la aplicación