Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Animate listView childs sólo una vez que aparecen

Tengo un listView con cerca de 20 artículos (artículos dinámicos). Quiero animar estos elementos primero se muestran al usuario. Algo así como las tarjetas de Google+. Hay algunos puntos que quiero lograr:

  1. Los elementos se animan sólo cuando el usuario comienza a verlos.
  2. Los elementos se animan sólo una vez. (No cada vez que el usuario los ve)
  3. En los elementos de desplazamiento rápido no se ensucien entre sí.
  4. Las animaciones comienzan con un retardo según la posición de los elementos.

Hasta ahora he intentado:

  • LayoutAnimationController (este método no cumplió con el primer requisito)
  • ConvertView.startAnimation (este método no cumplió con el segundo requisito)
  • ConvertView.startAnimation con una bandera que si el elemento en posición se ha animado antes o no (este método no funcionó para los primeros elementos de listView porque, el método getView se llamará dos veces para los primeros elementos de listView. ¡Saber por qué! Layout_height y layout_width son ambos match_parent))

Busqué mucho pero no pude llegar con una solución.

Por cierto, prefiero no usar bibliotecas externas. Ya lo he visto antes.

Gracias.

  • Android - ¿Cómo puedo medir el rendimiento de ListView y otras vistas?
  • Cómo obtener el contexto en getView del adaptador para listview
  • Configuración de la tarea asincrónica para cargar Json en una vista de lista
  • Android abriendo el menú contextual después de hacer clic en el botón
  • Cómo quitar el divisor inferior del pie de página en una vista de lista de android
  • ListView getChildAt devolver null para los niños visibles
  • Haga clic en ImageView dentro de ListView ListItem y obtenga la posición?
  • Cambiar el color de texto de ListView
  • One Solution collect form web for “Animate listView childs sólo una vez que aparecen”

    Acabo de probar esto y parece cumplir con todos sus requisitos:

    boolean[] animationStates; public void YourConstructor(...) { ... animationStates = new boolean[data.size()]; } @Override public View getView(int position, View convertView, ViewGroup parent) { // (Re)Use the convertView if (convertView == null) { convertView = mInflater.inflate(R.layout.popup_list_item, parent, false); if (!animationStates[position]) { Log.e("TAG", "Animating item no: " + position); animationStates[position] = true; Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.fade_in); animation.setStartOffset(position*500); convertView.startAnimation(animation); } } // Use convertView here return convertView; } 

    Aquí está mi archivo fade_in.xml si está interesado:

     <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true"> <alpha android:duration="1000" android:fromAlpha="0.0" android:toAlpha="1.0"/> </set> 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.