Android ListView: obtenga una distancia de desplazamiento

¿Hay de todos modos para determinar el número exacto de píxeles que un usuario ha overscrolled por en un Android ListView? Cuando el usuario intenta desplazarse más allá del primer elemento de la lista, y la animación de rebobinado / rebote entra en acción, necesito detectar la distancia de sobrecarga. Básicamente voy a hacer algo en ese espacio, como un doblez en la animación, similar a la aplicación Clear en el iPhone .

He intentado llamar a getScrollY() y getTop() en mi ListView, y sus elementos (usando getChildAt(0).getTop ), pero todo devuelve 0. Para referencia mis elementos de lista son todos de la misma altura.

También he intentado agregar un onScrollListener al listview y apenas calcular la diferencia entre el Y pos original en ACTION_DOWN , y el Y pos en ACTION_MOVE , pero parece que el listview desplaza en una velocidad más lenta.

Cualquier ayuda sería grande.

¿Qué hay sobre la sustitución de este método?

Protegido booleano overScrollBy (int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)

El scrollY permanecerá 0, pero podría acumularse deltaY cuando isTouchEvent es true para obtener hasta qué punto el usuario overscrolled.

Después de mucha excavación, y aún más frustración, la respuesta parece ser que no se puede. Lo que es aún más molesto es que he echado un vistazo al código fuente de Android y puedo ver que el código que necesito está muy bien escondido en los gubbings interiores del AbsListView. Pero no todo está perdido. Parece que usted puede construir su propia vista utilizando el AbsListView como guía, y hacer lo que necesita dentro de él. Es más longwinded de lo que quería, pero que así sea. También he encontrado un buen tutorial sobre cómo construir tu propia vista, en la que puedes hacer lo que quieras.

Editar

Finalmente tengo una demo en funcionamiento en Github. Si estás interesado puedes encontrarlo aquí . Cuando se despliega desde la parte superior, una nueva vista girará, si se suelta o se desplaza hacia arriba, la vista girará hacia fuera.

Al principio pienso que puedo conseguir la distancia del overscroll en onOverScrolled, pero en onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY)

El scrollX puede ser 0 o el maxOverScrollDistence.

Así que usted no puede conseguir la distancia de Overscroll allí.

Pero puede obtener una distancia de Overscroll en

Protegido booleano overScrollBy (int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)

Por ejemplo si su scrollview se desplaza verticalmente, entonces

If (deltaY + scrollY <0) {overscrollDistance = deltaY + scrollY}

  • CSS específico del navegador para navegadores móviles
  • CKEditor 4.4.7 no aparece en ningún navegador móvil
  • ¿Puedo usar Corona sdk para hacer aplicaciones sin juego?
  • ¿Implementar aplicaciones WebGL como aplicaciones nativas de iOS o Android?
  • Web móvil: deshabilita la selección de texto de toque largo / taps
  • Obtener MSISDN desde la tarjeta SIM con Android
  • Secretos de OAuth en aplicaciones para móviles
  • NavigationGroup android en Titanium
  • Móvil Barrera de acceso al desarrollo
  • Cómo poner la autenticación de usuario en una aplicación móvil
  • Marco basado en JSF para sitios web táctiles
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.