2012-10-04 49 views
21

Así que he estado teniendo problemas de animación, especialmente cuando dos animaciones ocurren a la vez o justo cuando se carga una actividad. Entiendo que es probablemente un problema de recursos y que suceden muchas cosas en el hilo principal que hace que las animaciones tartamudeen.La animación de Android reduce el tartamudeo/entrecortado/lag

he encontrado un par de sugerencias interesantes:
1. Hilos (ThreadPoolExecutor)
aquí:How do I make my animation smoother Android
2. setDrawingCacheEnabled (verdadero)
aquí:How does Android's setDrawingCacheEnabled() work?
3. ViewGroup: animationCache = verdadero
Aquí: http://www.curious-creature.org/2010/12/02/android-graphics-animations-and-tips-tricks/

Sin embargo, no he podido encontrar ningún tipo de ejemplos para implementar estas cosas. ¿Algunas ideas?

+0

AsyncTasks también son una manera fácil de implementar los hilos de fondo. Si realiza muchos cálculos en el hilo principal, definitivamente necesita implementar thread o asynctasks, el hilo principal está aquí para la interfaz de usuario, no para el trabajo pesado. – Teovald

+0

Sí, lo sé, estoy buscando más ejemplos sobre animaciones que se usan con Threads/AsyncTasks – Rawr

Respuesta

8

he reducido la cantidad de tartamudeo en mis animaciones siguiendo estas reglas enumeradas en orden de importancia cuando la reducción de tartamudeo:

  1. no inician animaciones en onCreate, onStart o onResume.
  2. Inicia animaciones en eventos de usuario como onClick y deshabilita eventos táctiles hasta que finalice la animación.
  3. no inician más de 2 animaciones simultáneamente
+0

¿cómo podemos "interactuar con el usuario hasta que se complete la animación"? –

+0

cuando comienzas la animación, configura una variable como animStart = 1 y verifica esa variable cuando vayas a presionar un botón, etc. Así que, por ejemplo, si mueves una capa, no quieres que los usuarios presionen el botón mientras la capa está reposicionando. Así que configure la variable y desconéctela cuando finalice la animación – Rawr

+0

¿Cuál sería la mejor manera de lograrlo? ¿Y si tuviera que animar mientras se carga la actividad? – Si8