Статьи

Пользовательская анимация для Android


Веб-сайт разработчиков 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 важных параметра, которые определяют поведение анимации:

    1. RepeatCount — количество шагов, которые имеет эта анимация.
    2. Длительность — время сна между 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/