Drawable Animation позволяет Вам загрузить последовательность Drawable-ресурсов один за другим, чтобы в результате получилась анимация. Это традиционный способ анимации, созданной с последовательностью разных картинок, проигрываемых в определенном порядке, наподобие фильма. Класс AnimationDrawable является базовым для анимации такого типа.
Когда Вы задаете в коде фреймы анимации с использованием AnimationDrawable класса API, более просто это можно реализовать в одном файле XML, в котором перечислены фреймы, составляющие анимацию. Файл XML для такой анимации должен принадлежать директории res/drawable/ Вашего проекта Android. В этом случае в файле XML могут быть заданы инструкции по порядку воспроизведения и длительность для каждого фрейма в анимации.
Файл XML состоит из элемента < animation-list > в качестве корневого и последовательных дочерних узлов < item >, которые задают каждый фрейм: drawable-ресурс для фрейма и длительность фрейма. Вот пример файла XML для Drawable-анимации:
< animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
< item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
< item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
< item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
< /animation-list >
Эта анимация состоит только из 3 фреймов (кадров). Установкой атрибута android:oneshot списка в true, анимация проиграется один раз и остановится на показе последнего кадра. Если этот атрибут установить в false, то анимация зациклится. С этим XML, сохраненным как файл rocket_thrust.xml в директории res/drawable/ проекта, он может быть добавлен как фоновое изображение для View и затем вызван для проигрывания. Вот пример Activity, в которой анимация добавлена к ImageView, и затем запускается, когда происходит касание экрана:
AnimationDrawable rocketAnimation;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
}
public boolean onTouchEvent(MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
rocketAnimation.start();
return true;
}
return super.onTouchEvent(event);
}
Важное замечание - метод start() экземпляра AnimationDrawable не может быть вызван во время метода onCreate() Вашей Activity, потому что AnimationDrawable еще не полностью подключен к окну приложения. Если Вы хотите проиграть анимацию немедленно, без необходимости взаимодействия с пользователем, то Вы можете вызвать её из метода onWindowFocusChanged() Вашей Activity. Этот метод вызывается, когда окно приложения Android получает фокус.
Дополнительную информацию о синтаксисе XML, доступных тегах и атрибутах см. [2], раздел Animation Resources.
[Ссылки]
1. Drawable Animation site:developer.android.com. 2. Типы ресурсов приложения Android. 3. Класс Activity. 4. AnimationDrawable: создание анимированной кнопки. |