Android Progressbar: неопределенная анимация без изображений

1

Я хотел бы создать неопределенную анимацию, которая просто исчезает из одного цвета в другой (импульс, если хотите). Я не думаю, что это должно требовать использования изображений, но, несмотря на все мои усилия, я не уверен, что понимаю, как использовать что-то вроде AlphaAnimation с Shape, чтобы выполнить это.

Может кто-то, пожалуйста, дать некоторое представление о том, как это сделать? У меня такое чувство, что я пропустил что-то довольно прямолинейное здесь. (Примеры всегда приветствуются!)

Спасибо!

Теги:
android-layout

1 ответ

2
Лучший ответ

Это тривиальная задача в 3.0 - вы можете настроить ObjectAnimator для изменения "цвета" или "backgroundColor" объекта (View, ColorDrawable, независимо от свойства) между двумя значениями. Для примера см. Анимацию ApiDemo/BouncingBalls.

Но если вы используете API-интерфейсы до 3.0, существует несколько подходов. Во-первых, вы можете настроить свой собственный обработчик, чтобы дать вам необходимые события синхронизации, а затем вычислить новый цвет в каждой точке.

Возможно, немного проще (если не полностью интуитивно) использовать AlphaAnimation. Все, что вы действительно хотите от анимации, - это процентные значения, а не исчезать. Таким образом, вы не устанавливаете анимацию в представлении, а просто устанавливаете ее для внутреннего запуска со значения от 0 до 1, затем получаете текущее анимированное значение в методе onDraw() и соответствующим образом устанавливаете текущий цвет.

Например, это настроит и запустит альфа-анимацию в течение одной секунды:

Transformation transform = new Transformation();
AlphaAnimation anim = new AlphaAnimation(0f, 1f);
anim.setDuration(1000);
anim.start();

Затем в вашем цикле рисования вы получите текущее анимированное значение:

long time = getDrawingTime();
anim.getTransformation(time, transform);
float elapsedFraction = transform.getAlpha();

Как только у вас есть искомое значение (значение от 0 до 1), вы можете рассчитать соответствующее значение между цветами.

Код выше может не соответствовать вашей ситуации точно, но вы должны быть способны сделать что-то похожее, чтобы получить то, что вы хотите.

  • 0
    Это похоже на взлом. Нет способа прикрепить анимацию или объект рисования таким образом, чтобы progressBar.setIndeterminate(true); будет запускать анимацию?
  • 0
    Я согласен - это взломать. Вот почему мы написали новую систему анимации в 3.0. Анимации, которые существуют до 3.0, хороши при выполнении определенных задач. Но если вы хотите оживить что-то за пределами этих ограниченных случаев, вы сами по себе. Использование обработчика для обеспечения собственного цикла синхронизации - это не хакерство (по крайней мере, если вы не используете один вид анимации для управления совершенно не связанным), но это больше код / работа. Сделайте ваш выбор...
Показать ещё 1 комментарий

Ещё вопросы

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