Я хотел бы создать неопределенную анимацию, которая просто исчезает из одного цвета в другой (импульс, если хотите). Я не думаю, что это должно требовать использования изображений, но, несмотря на все мои усилия, я не уверен, что понимаю, как использовать что-то вроде AlphaAnimation с Shape, чтобы выполнить это.
Может кто-то, пожалуйста, дать некоторое представление о том, как это сделать? У меня такое чувство, что я пропустил что-то довольно прямолинейное здесь. (Примеры всегда приветствуются!)
Спасибо!
Это тривиальная задача в 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), вы можете рассчитать соответствующее значение между цветами.
Код выше может не соответствовать вашей ситуации точно, но вы должны быть способны сделать что-то похожее, чтобы получить то, что вы хотите.
progressBar.setIndeterminate(true);
будет запускать анимацию?