2011-09-07 18 views
6

estoy usando un (clase padre de ViewFlipper)ViewAnimator a hacer algún tipo de libro interactivo. La jerarquía es más o menos así:Cómo mejorar el rendimiento de ViewFlipper/ViewAnimator

<ViewAnimator> 
    <include layout="@layout/p0" /> 
    <include layout="@layout/p1" /> 
    <include layout="@layout/p2" /> 
    ... 
</ViewAnimator> 

Así las páginas del libro están dentro del ViewAnimator. Cada página tiene un FrameLayout con múltiples capas de ImageViews animadas, TextViews, Botones ... que resultó ser demasiado. Mostrar una nueva página del libro a través de viewAnimator.showNext() puede llevar segundos. Todo ese tiempo se gasta en ImageView.onDraw() -Traceview.

-tendrá cualquier diseño alternativa a ViewAnimator (ViewPager, otras implementaciones de ViewGroup ...) ¿mejorar algo?

-Existe alguna forma de precargar las vistas una ViewFlipper/ViewAnimator/other se mostrará a continuación? (para que la próxima página del libro esté siempre lista y feliz en la memoria)

-¿Debo usar Canvas o GLSurfaceView? (no se puede utilizar el marco de animación)

Estoy atascado ... ¿me puedes ayudar?

+0

Estoy tratando de usar ViewFlipper para imitar el comportamiento de Panorama Control en Windows Phone y existe el mismo problema (flipping de visión lenta). ¿Cómo mejorar el cambio de vista de ViewFlipper? – anonim

Respuesta

3

No puedo responder todas sus preguntas, pero le daré lo que sé, ya que es mejor que la falta de otras respuestas. : P

ViewPagers carga las vistas en cualquier lado de forma predeterminada. Esto acelera el cambio, pero puede ralentizar la vista que está abierta actualmente. El número de vistas precargadas en un visor se puede configurar mediante uno de sus métodos.

Si no quiere un ViewPager, puede tratar de instanciar las vistas que quiera precargarse, y simplemente configurarlas para que sean invisibles.

No tengo experiencia con el lienzo o GL además de las superposiciones de mapas, pero espero que PODRÍAN ser mucho más rápidos/receptivos/eficientes si se implementan correctamente ya que no tendría ninguna funcionalidad innecesaria. Sin embargo, puede ser complicado, dependiendo de la fuente de su contenido.

RECOMENDACIÓN: Pruebe ViewPager, está hecho para implementaciones como la suya. Si no está satisfecho con él, arréglese las mangas y revise las cosas del lienzo.

4

para mejorar el rendimiento de la ViewFlipper, se puede establecer

android: measureAllChildren = "false"

en el xml. Esto normalmente se establece en falso para FrameLayout, pero ViewAnimator lo habilita de manera predeterminada por algún motivo.

Configurarlo en falso resolvió un problema de latencia muy extraño para mí.

+0

... muy cierto. Gracias por abrir los ojos –

Cuestiones relacionadas