Альтернатива AbsoluteLayout? Лучший подход для спрайтовой анимации?

1

Класс AbsoluteLayout (и содержащий класс LayoutParams с x и y свойствами) устарел. Хотя можно катить мой собственный класс, который расширяет ViewGroup и позволяет мне контролировать абсолютное позиционирование дочерних представлений - это лучший подход для спрайтов?

Прежде всего, я сделал предположение, что перемещение ImageViews путем изменения их позиции x и y будет более эффективным, чем перерисовка растровых изображений внутри SurfaceView. Правильно ли это предположение?

Мой более широкий вопрос на самом деле: какой лучший подход для анимации спрайтов в Android?

Теги:

2 ответа

0

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

0

Чтобы ответить на первый вопрос: вместо FrameLayout. Это самый простой из всех менеджеров макетов и просто удаляет всех детей в верхний левый угол. Вы можете перевести их с помощью функций offsetTopAndBottom() и offsetLeftAndRight(), определенных в View. Кроме того, параметры компоновки для FrameLayout поддерживают настройки полей. Droid-Fu использует эту технику для размещения липких представлений на экране. Здесь исходный код.

Что касается вашего другого вопроса, я предполагаю, что вы имеете в виду анимацию, основанную на ключевых кадрах. Фрагмент анимации описан здесь.

  • 0
    Нет, я не имел в виду кадровую анимацию. Хотя отдельные спрайты могут быть кадровой анимацией. FrameLayout выглядит так, как я хочу. Опять же, я предполагаю, что перемещение виджетов вокруг происходит быстрее, чем перерисовывание растровых изображений в анимации SurfaceView.
  • 0
    Это не работает offsetTopAndBottom () и offsetLeftAndRight () не влияют на положение представления. Никто не делает setPadding (). Есть ли какой-то метод «refresh () / invalidate ()», который я должен вызывать? В данный момент я пытаюсь переместить значок в методе run () объекта TimerTask. Я предполагаю, что мой объект TimerTask находится в потоке пользовательского интерфейса, поэтому не должно быть проблем с обновлением пользовательского интерфейса. Почему это не работает?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню