Как улучшить производительность ViewFlipper / ViewAnimator - PullRequest
6 голосов
/ 07 сентября 2011

Я использую ViewAnimator (родительский класс ViewFlipper ) для создания какой-то интерактивной книги. Иерархия примерно такая:

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

Так что страницы книги находятся внутри ViewAnimator. Каждая страница имеет FrameLayout с несколькими слоями анимированных ImageViews, TextViews, Buttons ... что оказалось слишком много. Отображение новой страницы книги с помощью viewAnimator.showNext () может занять несколько секунд. Все это время уходит в ImageView.onDraw () -Traceview.

- Будет ли улучшен какой-либо макет альтернатива ViewAnimator (ViewPager, другие реализации ViewGroup ...)?

-Есть ли способ предварительно загрузить представления ViewFlipper / ViewAnimator / other покажет дальше? (чтобы следующая страница книги была всегда готова и счастлива в памяти)

- Должен ли я использовать Canvas или GLSurfaceView? (нельзя использовать фреймворк анимации)

Я застрял ... Вы можете помочь?

Ответы [ 2 ]

4 голосов
/ 24 марта 2014

Чтобы повысить производительность ViewFlipper, вы можете установить

андроида: measureAllChildren = "ложь"

в XML. Это обычно устанавливается в false для FrameLayout, но ViewAnimator по умолчанию почему-то включает его.

Установка его в false решила для меня очень странную проблему с задержкой.

3 голосов
/ 19 июля 2012

Я не могу ответить на все ваши вопросы, но я дам вам то, что знаю, так как это лучше, чем отсутствие других ответов. : P

ViewPager по умолчанию загружает изображения с обеих сторон. Это ускоряет переключение, но может замедлить вид, который открыт в данный момент. Количество предварительно загруженных представлений на видеопейджере можно установить одним из его методов.

Если вам не нужен ViewPager, вы можете попытаться на самом деле создать сами представления, которые вы хотите предварительно загрузить, и просто установить их как невидимые.

У меня нет опыта работы с холстом или GL, кроме наложения карт, но я ожидаю, что они МОГУТ быть намного быстрее / отзывчивее / эффективнее, если их правильно реализовать, поскольку у вас не будет лишних функциональных возможностей. Хотя это может быть грязно, в зависимости от источника вашего контента.

РЕКОМЕНДАЦИЯ: Попробуйте ViewPager, он сделан для реализаций, подобных вашей. Если вы недовольны этим, закатайте рукава и проверьте материал на холсте.

...