Android: el salto de Listview a scrollview

¿Cualquier forma de añadir el efecto de rebote de ListView a scrollview regular? Por rebote quiero decir la banda de goma como efecto cuando se golpea el fondo de la lista.

Por la apariencia de las cosas en la API ScrollView debería ser capaz de anular el método onOverScrolled() si crea una vista personalizada que extiende la clase ScrollView . Después de hacer una búsqueda rápida de Google me encontré con este enlace y parece que esto es lo que está tratando de hacer … Creo que este método se agregó en Android 2.3.1 sin embargo por lo que se limitará a los dispositivos que funcionan.

Añadir rebote de efecto a listview en android

Paso 1 : Crear un nuevo archivo BounceListView en el paquete com.base.view

 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); } } 

Paso 2: En su diseño, cambie por favor

 <ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 

a

 <com.base.view.BounceListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 

He encontrado la mejor implementación de BounceListView (bajo licencia LGPL). Aquí está: https://github.com/Larphoid/android-Overscroll-ListView

Probablemente tenga un dispositivo Samsung personalizado. Debes saber que el efecto de rebote no es el comportamiento predeterminado del sistema operativo Android, es algo introducido por Samsung (y está mal implementado también, deberían haber hecho que el ScrollView comportara igual). Overscroll soporte fue introducido en Android 2.3, y el comportamiento por defecto no está rebotando, sino que es un resplandor de luz con la intensidad directamente proporcional a la velocidad de desplazamiento / "fuerza". Y funciona en todas partes (listviews, scrollviews, webviews, etc).

En conclusión, no debe preocuparse por esto. No hay ningún argumento simple que se puede pasar a ScrollView para hacer que overscroll como eso. Y pasar por todos los problemas de extender la clase ScrollView no vale la pena, IMO. Sólo confíe en el comportamiento predeterminado.

Si Samsung quiere meterse con sus usuarios y darles una interfaz de usuario incoherente, entonces así sea.

Para aquellos que quieren implementar el efecto de rebote en ListView .

Cómo

Una forma de agregar este efecto es usar addHeaderView y addFooterView en ListView , y su relleno ( topPadding para la vista de encabezado y bottomPadding para la vista de pie de página) se establecen en 0 por primera vez, entonces onTouchEvent el onTouchEvent y cambiamos el relleno según La distancia de movimiento.

Implementación

Código de muestra

Notas

La idea se toma prestada de android-pulltorefresh , ya que el efecto de rebote son más simples que pull-to-refresh, por lo que el código es más corto también. ^ _ ^

Espero que esto ayude a alguien..

  • ListView onClickListener () no funciona después de agregar RadioButton
  • Detener Android desde el diseño de todas mis vistas
  • El texto de la marquesina no funciona en el widget
  • Crear, almacenar e inflar diseño personalizado en tiempo de ejecución
  • Problema con la presentación de TabHost Layout en una nueva intención
  • Estilo personalizado para Android TabWidget
  • Posición del botón de Android mediante programación
  • Establecer widget de la Galería de Android para mostrar la imagen de inicio específica
  • ¿Cómo actualizar SeekBar no disparar OnSeekBarChangeListener?
  • En el Listener del llamador llamado dos veces
  • Cómo configurar la altura del elemento de vista de lista personalizada ...?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.