Capas de hardware y animación de vista de Android

Actualmente estoy tratando de averiguar cómo utilizar correctamente las capas de hardware cuando se animan las vistas.

Estoy implementando un ViewGroup que permite al usuario arrastrar una vista secundaria, después de lo cual lo animo a una posición cuando liberan (como cómo ViewPager se instalará en una página). En este artículo se establece que sólo debe habilitar capas de hardware para la duración de la animación.

El problema que tengo es que después de que las capas de hardware están habilitadas Android tiene que crear las capas, que tarda 70-100ms en un Nexus Galaxy. Esto significa que no puedo hacerlo inmediatamente antes de iniciar la animación, ya que tener el retraso entre el arrastre y la animación sería muy notable. Tampoco puedo habilitarlo al iniciar un arrastre por el mismo motivo.

Ahora, este retraso sólo está presente en la primera vez que se crean capas de hardware, por lo que idealmente desearía que se crearan tan pronto como se agreguen las vistas al diseño. He sido señalado a View.buildLayer () , pero no estoy seguro de cómo abordar esto.

  • ¿Cuál sería la manera correcta de lograr esto?
  • ¿Hay algún método en mi ViewGroup que pueda reemplazar y llamar a buildLayer () en las vistas secundarias?
  • ¿Se puede invalidar la capa de hardware de alguna manera, causando otro retardo de 70-100ms? ¿Y cómo puedo manejar esto?

El retraso ocurre cuando no hay capa en la caché, no debería ver este retraso para las llamadas posteriores a setLayerType (NONE) / setLayerType (HARDWARE). Podrías llamar a buildLayer () de onSizeChanged () para forzar que se construya una capa y luego ponerla en caché (llamada setLayerType (NONE) para mover la capa a la caché).

Tenga en cuenta que el retraso que está viendo depende en gran medida del dispositivo en el que se está ejecutando.

La razón por la que no debería mantener activadas las capas es que duplica la cantidad de trabajo de dibujo cada vez que se actualiza la vista. Por ejemplo, si mueve un ListView en una capa y luego desplaza la lista, cada actualización de marco durante la animación de desplazamiento provocará: (a) la lista para repetir en la capa (b) la capa que se dibujará en la pantalla. Es extremadamente costoso y puede causar problemas de rendimiento dependiendo de la complejidad de su interfaz de usuario.

  • ¿Cómo animar un VectorDrawable de una manera fluida-como?
  • Cómo animar un camino en el lienzo - android
  • Android creando cadena de animación ViewPropertyAnimator
  • Cómo iniciar dos animaciones en dos vistas diferentes en API lvl 19
  • En android, ¿cómo hacer que una imagen crezca desde un punto usando animación?
  • ¿Cómo realizar una animación de desvanecimiento en la transición de la actividad?
  • AnimationSet setInterpolator () no funciona wen usando nineoldandroids lib
  • Temporizador de rectángulo de dibujo de Android con animación
  • Android aplicar color a la animación alfa
  • Actualizar el diseño con la animación
  • ¿Cómo traducir la animación en una imagen diagonalmente?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.