Я разрабатываю простую 2D-игру. Игра начинается с одной анимации, затем игроки нажимают на экран, а другая анимация должна работать без заметной задержки при переключении на следующую анимацию. Мой первый подход состоял в том, чтобы использовать AnimationDrawable с списком анимации из 40 PNG [кадров]. Я хотел использовать два таких AnimationDrawables. Этот подход вызывает OOM из-за поведения android по загрузке всех кадров анимации, прежде чем играть в нее. Затем я решил разделить мою одиночную анимацию на 4 анимации по 10 кадров каждый. Первая анимация из 10 кадров работает отлично, но когда я играю второй [сразу после первого прекращения], я получаю OOM и приложение закрывается.Запуск нескольких анимаций без заметного отставания
1) Я наткнулся на это решение: https://stackoverflow.com/a/10993879/6699069 Это похоже на идеальное решение моей проблемы. Но я не знаю об объекте OnAnimationStoppedListener, который используется в решении. О нем нет на сайтах developers.android.com или где-либо еще. Я хотел напрямую спросить @Pinhassi по комментариям, но не могу добавить комментарий, благодаря 50 репутациям.
Edit: я нашел почти аналогичное решение here работает без каких-либо ошибок: D Но имеет такую же задержку, как я уже говорил в 4) Я даже установить delayMillis = 0; Он по-прежнему работает примерно на 10fps [наблюдается]
2) Должность составляет 5 лет, поэтому я думаю, теперь должен существовать предопределенный класс для использования длинных анимаций без появления OOM. Пожалуйста, укажите мне ссылку, если такой класс существует.
3) Друг предложил мне использовать gif вместо анимации. Но я думаю, что нет возможности остановить/сыграть gif программно. Кроме того, gif с 40 кадрами кажется фантазией. Если кто-то знает использовать gif в качестве эквивалента анимации, пожалуйста, заткните немного света.
4) Мой старый подход [когда я не знал о классе AnimationDrawable] должен был использовать SurfaceView и рисовать 40 растровых изображений на холсте в цикле для имитации анимации. Это сработало, но частота кадров раздражающе медленная. Он становится медленнее, когда игрок удаляет экран. Кроме того, частота кадров значительно отличается на разных телефонах. Некоторые люди предложили мне уменьшить разрешение изображения. Я уменьшил свои изображения с 720p до 320p, но это не имело большого значения. Любой способ ускорить анимацию с помощью этого подхода?
Я был бы очень благодарен, если кто-то может ответить 1) и 2).
Переход к 'GLSurfaceView' (или OpenGL двигатель) и/или посмотреть на использование спрайт листа вместо отдельных изображений. – Tigger