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.
- Android EditText ("Textbox"): Auto capitalización de la primera letra de cada palabra mientras el usuario escribe
- ¿Cómo puedo agregar WebView a un Widget?
- Cómo puedo colocar un evento de doble clic en ImageView en Android
- ¿Alguna vez alguien ha intentado utilizar DialerFilter?
- Android: cómo borrar un edittext mediante botón cruzado en el lado derecho
- Excepción de seguridad al llamar a bindAppWidgetId
- Android Cómo ajustar el diseño en el modo de pantalla completa cuando el teclado virtual está visible
- Android: EventHub.removeMessages (int what = 107) no es compatible antes de que se configure WebViewCore
- ¿Cómo puedo actualizar correctamente AppWidget?
- ¿Cree la lockscreen personalizada para android 4.0 o arriba?
- Android: Iniciar actividad a través de enlace en TextView
- Autenticación en tu aplicación para Android
- Referencia para buenos patrones de diseño de la interfaz de usuario de Android
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..
- Cómo cerrar un cuadro de diálogo en Android mediante programación?
- Google Maps v2 Establecer nivel de zoom