Я реализовал ViewPager в своем приложении, и кроме страничной прокрутки у меня есть кнопки «Далее» и «Назад», с простым методом onClick, единственной строкой является setCurrentItem для ViewPager.
Хотя анимация подкачки полностью плавная во время пролистывания, она более или менее мгновенная (просто переворачивается вместо прокрутки), когда я нажимаю кнопку «Далее» или «Назад». Нет видимого «прокручивающего» движения, или иногда едва видимого, однако даже близко не к гладкому. Это никак не повлияет на удобство использования приложения, поскольку переход по-прежнему происходит немедленно, но визуально он выглядит гораздо менее привлекательным, и пользовательский опыт страдает.
Теперь я подозреваю, что это как-то связано с тем, что приложение рисует следующий вид и, следовательно, "пропускает" анимацию. Мой instantiateItem использует LayoutInflater и простой оператор switch для раздувания каждого представления (максимум 4 страницы), и я загружаю собственные ListViews внутри каждого случая в операторе switch. Пользовательские ListViews имеют длину не более 3 элементов, с TextView и ImageView в каждой строке (размер ImageView составляет 5 КБ). Мне кажется, что это количество объектов не должно быть достаточной причиной, чтобы замедлить анимацию подкачки.
Кроме этого, у меня также есть собственный фон, назначенный моему приложению в styles.xml, и этот фон используется во всех действиях (размером 160 КБ).
Это единственное, что, я думаю, может замедлить работу приложения, поскольку метод onClick содержит только одну строку (setCurrentItem), поэтому в приложении ничего не происходит, кроме перехода к следующему представлению, а instantiateItem - это простейшая реализация метода из всех возможных.
Вещи, которые я пробовал:
Установка для ViewPager setOffScreenPageLimit значения 4, который, как я думал, будет предварительно загружать представления и устранять любую загрузку между страницами, но в конце установка его на 0, казалось, немного увеличивала вероятность того, что объект будет отображаться по крайней мере кадр анимации
Оптимизация пользовательских ListViews с помощью convertView для повторного использования старых представлений, в то время как это приводило к большему количеству отображаемой анимации, но все еще было не совсем плавным, варьируя от «почти идеальной анимации» до «мгновенного пролистывания»
Удаление пользовательского фона, которое вместе с двумя вышеупомянутыми исправлениями приводило к почти достаточно хорошему решению, но все равно приводило к переворотам каждые несколько шагов.
Описанные выше действия заставляют меня поверить, что это как-то связано с загружаемыми видами, но я не нашел хорошего решения для их предварительной загрузки с желаемым эффектом.
Зная свои навыки программирования для новичков, я знаю, что есть верный способ решить эту проблему, не прибегая к демонстрации дизайна самого приложения, но читая документацию, вопросы по переполнению стека, прибегая к помощи по поиску советов, я просто выбежал из мест смотреть.
Подводя итог этому, вероятно, слишком устному описательному сообщению, я задаю следующие основные вопросы:
Есть ли способ обеспечить плавную анимацию ViewPager? Может быть, отдельная тема? Как я понимаю, пользовательский интерфейс должен быть только в главном потоке, где он уже есть, и ничего кроме загрузки представления не выполняется в коде во время подкачки.
Должен ли я использовать другой способ загрузки страниц? Помогут ли фрагменты?
Спасибо за любой совет.
пс. Отсутствие кода связано с тем, что рассматриваемые методы являются наиболее возможными реализациями, но я предоставлю код при необходимости.