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.
- ¿Hay un equivalente TweenMax en Java
- Transición de elemento compartido (primer plano / fondo)
- ViewFlipper tiene un retraso "enorme"
- Cómo implementar Diseño de materiales Animaciones de superficie coreográficas
- Circular Revelar no funciona cuando la gravedad FAB es inferior
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?
- ObjectAnimator onAnimationEnd se escucha antes de que termine la animación
- Utilizar un ValueAnimator para hacer que un TextView parpadee diferentes colores
- Cómo mover una imagen de izquierda a derecha en android
- Android Google Maps v2 Animación de la cámara
- Animar la actualización de ProgressBar en Android
- Fragmento: Nombre de animación desconocido objectanimator
- Animación personalizada de Android
- Fragmento de la animación de transición perdida tras el cambio de configuración
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.
- Android NDK: crea dos bibliotecas compartidas nativas que se llaman
- Android: ¿Dónde poner el código onCreate () de la actividad en un fragmento?