2012-02-26 11 views
8

Estoy trabajando en una aplicación en la que me gustaría implementar la funcionalidad de deslizar para descartar en el ListView, similar a lo que vemos en la barra de notificaciones de Android 4.0, en la lista de aplicaciones recientes o en las pestañas del navegador. Quiero ejecutar la aplicación en los dispositivos con Android 2.2+. Vea la siguiente imagen. También quiero cambiar la transparencia del artículo que se está eliminando, al igual que en ICS.¿Cómo implementar Android 4.0 como deslizar para descartar la funcionalidad en ListView?

Android 4.0 Web Browser - Swiping away the open tabs http://img19.imageshack.us/img19/3605/screenshot2012022617290.png

he comprobado la fuente del navegador web del ICS en http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.1_r1/com/android/browser/TabScrollView.java?av=f pero no pudimos averiguar qué clase es sobre todo responsable de implementar esta funcionalidad.

¿Puede alguien señalarme en la dirección correcta aquí? ¿Podemos hacer esto usando la Biblioteca de compatibilidad de Android? Por favor hagamelo saber. Muchas gracias.

Respuesta

0

Sé que esta es una pregunta bastante antigua, pero para cualquiera que todavía esté buscando esto, puede echar un vistazo a la biblioteca de Roman Nurik aquí: https://github.com/romannurik/Android-SwipeToDismiss

Esto muestra cómo crear el comportamiento requerido para la vista de lista así como para las vistas normales.

3

He pensado en la implementación de esta característica también, pero aún no lo he hecho. Por lo tanto, lo único que puedo proporcionar son algunas ideas sobre cómo I abordaría ese problema. Si eventualmente escribí algún código, lo publicaré aquí.

  1. La clase principal necesaria es un Adaptador personalizado que amplíe un ListAdapter (ArrayAdapter, SimpleCursorAdapter etc.).
  2. El adaptador aplica View.OnTouchListener a todas sus vistas.
  3. Cuando el oyente detecta un desplazamiento horizontal dx, llama al concernedView.offsetLeftAndRight(dx) (lo que hará que la vista se pueda arrastrar). Por supuesto, el adaptador tiene que guardar el desplazamiento horizontal actual para la vista. Si el usuario estaba arrastrando una vista y saca su dedo de la pantalla, el touchListener detectará esto también y comenzará una animación de deslizamiento hacia atrás. Usando el desplazamiento actual también podemos calcular un valor alfa, por lo que la vista se desvanecerá cuando se acerque a los bordes de la pantalla.
  4. Si el usuario finaliza una entrada de la lista, se vuelve un poco complicado y todavía no estoy seguro de cómo implementaría la siguiente acción: El contenido de la lista debe actualizarse (o el adaptador debe ignorar el entradas rechazadas) y los puntos de vista que estaban por debajo del que se descartó deben desplazarse hacia arriba para llenar el vacío. Creo que podría funcionar dejar que ListView cargue el nuevo contenido, pero eso llenaría el espacio de manera instantánea. Para evitar eso, comenzaría una animación que permite que todas las vistas afectadas pasen de su posición anterior (donde aún teníamos el espacio) a su posición actual (donde se llena el espacio).

Estos son solo algunos de mis pensamientos sobre el tema que podrían ayudar a algunas personas a comenzar a trabajar en el problema. Como dije, probablemente voy a implementar eso alguna vez en el futuro y, por supuesto, publicaré el código aquí.
Agradecería cualquier comentario en los comentarios, pero no quiero explicar exhaustivamente cada aspecto de mi idea, eso me llevaría demasiado tiempo;)

+0

Bueno, eso es un comienzo. Intentaré crear algo basado en esto y actualizaré aquí si tengo éxito. – iamronak

+3

Antes de quitar la vista, anima su altura a 0. Eso hará que la lista colapse muy bien. Entonces, una notificación no será un chasquido discordante. – Hounshell

Cuestiones relacionadas