Comment améliorer les performances de ViewFlipper / ViewAnimator

j'utilise un ViewAnimator (classe parent de ViewFlipper ) pour faire une sorte de livre interactif. La hiérarchie est à peu près comme ceci:

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

donc les pages du livre sont à l'intérieur du ViewAnimator. Chaque page a un FrameLayout avec plusieurs couches d'ImageViews animées, TextViews, boutons... qui s'est avéré être trop. Affichage d'une nouvelle page du livre via viewAnimator.showNext () peut prendre deuxième. Tout ce temps est passé dans ImageView.onDraw () - Traceview.

- Will any layout alternative à ViewAnimator (ViewPager, autres implémentations de ViewGroup...) améliorer quoi que ce soit?

- y a-t-il un moyen de précharger les vues un ViewFlipper/ViewAnimator/autre affichera ensuite? (de sorte que la page suivante du livre est toujours prête et heureuse dans la mémoire)

- dois-je utiliser de la toile ou GLSurfaceView? (ne peut pas utiliser le cadre d'animation)

je suis coincé... pouvez-vous aider?

6
demandé sur slipbull 2011-09-07 21:56:32

2 réponses

pour améliorer les performances du ViewFlipper, vous pouvez définir

android: measureAllChildren= "false"

dans le xml. Ceci est normalement défini à false pour FrameLayout, mais ViewAnimator l'active par défaut pour une raison ou une autre.

le mettre à false a résolu un problème de retard très étrange pour moi.

4
répondu dac2009 2014-03-24 16:50:12

Je ne peux pas répondre à toutes vos questions, mais je vais vous donner ce que je sais car c'est mieux que l'absence d'autres réponses. : P

Les téléavertisseurs

chargent les vues de chaque côté par défaut. Cela accélère le commutateur, mais pourrait ralentir la vue qui est actuellement ouverte. Le nombre de vues préchargées sur un viewpager peut être défini en utilisant une de ses méthodes.

si vous ne voulez pas D'un ViewPager, vous pouvez essayer d'instancier réellement les vues que vous voulez préchargées vous-même, et simplement les mettre à l'invisible.

Je n'ai pas l'expérience de la toile ou de la GL à part les cartes superposées, mais je m'attends à ce qu'elles puissent être beaucoup plus rapides/réactives/efficaces si elles sont correctement mises en œuvre car vous n'auriez aucune fonctionnalité inutile. Peut être salissant bien que, selon la source de votre contenu.

recommandation: Essayez le ViewPager, il est fait pour des implémentations comme la vôtre. Si vous n'êtes pas satisfait avec elle, retroussez vos manches et de vérifier dans la toile des choses.

3
répondu bhekman 2012-07-19 16:47:45