Веб-сайт разработчиков Android предоставляет вам 2 предопределенных метода анимации, которые вы можете использовать в своих приложениях — анимация анимации и покадровая анимация . Они очень просты в реализации и работают довольно хорошо.
Если вы используете Android 3.0 или выше, вы должны проверить метод анимации свойств .
Но что, если вам нужно создать собственную настроенную анимацию и вы используете более старые версии? Не волнуйтесь, это легко сделать, вот как вы это делаете.
Для создания индивидуальной анимации вам необходимо выполнить следующие 3 шага.
Для пояснения мы создадим простую анимацию, которая постепенно меняет фон кнопки с черного на красный.
Шаг 1 — Расширение класса Animation и установка свойств.
Создайте класс, который расширяет класс Android Animation .
Этот класс будет содержать логику вашей анимации.
Смотрите мой пример:
public class BGColorAnimation extends Animation { private View view; private int currentRedColor; //The steps to skip between colors private static int STEP_SIZE=30; private static int ANIMATION_DURATION=50; public BGColorAnimation(View view) { this.view=view; setDuration(ANIMATION_DURATION); setRepeatCount(255/STEP_SIZE); setFillAfter(true); setInterpolator(new AccelerateInterpolator()); setAnimationListener(new MyAnimationListener()); } }
- Как видите, в этом классе не так много, так как моя анимация не так сложна.
- Обратите внимание, что я произвел инициализацию всех необходимых параметров анимации внутри конструктора, но вы можете демонстративно инициализировать их извне класса.
- Есть 2 важных параметра, которые определяют поведение анимации:
- RepeatCount — количество шагов, которые имеет эта анимация.
- Длительность — время сна между 2 шагами.
- На каждом шаге слушатель анимации будет запущен.
Шаг 2. Реализация интерфейса AnimationListener
Создайте класс, который реализует Animation.AnimationListener .
Как уже упоминалось, он запускается на каждом шаге анимации.
class MyNumbersAnimationListener implements AnimationListener{ private int index; class MyAnimationListener implements AnimationListener{ @Override public void onAnimationEnd(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { // Change color of the view view.setBackgroundColor( Color.rgb(currentRedColor+=STEP_SIZE, 0, 0)); } @Override public void onAnimationStart(Animation animation) { view.setBackgroundColor(Color.BLACK); currentRedColor=0; } }
На самом деле, я не вижу причин, почему бы не выполнить оба шага в одном классе:
public class BGColorAnimation extends Animation implements Animation.AnimationListener { private View view; private int currentRedColor; // The steps to skip between colors private static int STEP_SIZE= 30; private static int ANIMATION_DURATION = 50; public BGColorAnimation(View view) { this.view = view; setDuration(ANIMATION_DURATION); setRepeatCount(255 / STEP_SIZE); setFillAfter(true); setInterpolator(new AccelerateInterpolator()); setAnimationListener(this); } @Override public void onAnimationEnd(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { view.setBackgroundColor( Color.rgb(currentRedColor += STEP_SIZE, 0, 0)); } @Override public void onAnimationStart(Animation animation) { view.setBackgroundColor(Color.BLACK); currentRedColor = 0; } }
Шаг 3 — Запустите анимацию из представления.
Анимации запускаются из представления.
Пример:
Button button = (Button)findViewById(R.id.b_colors); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { button.startAnimation(new BGColorAnimation(button)); } });
Источник: http://www.aviyehuda.com/2011/07/android-development-custom-animation/