Я пытаюсь анимировать непрозрачность круга в функции OnDraw
класса, расширяющего View
, используя ValueAnimator
w / setAlpha
. Я положил отладочный тост внутрь onAnimationUpdate
. Быстрая последовательность всплывающих подсказок отображает альфа-значения (onAnimatetionUpdate имеет правильные значения), но форма не меняется на экране. Я пробовал invalidate()
и postInvalidate()
в onAnimationUpdate()
, но думаю, что это красная сельдь.
С https://developer.android.com/guide/topics/graphics/prop-animation
В зависимости от того, какое свойство или объект вы анимируете,
вам может понадобиться вызвать инвалида () ...
setAlpha () и setTranslationX () лишают законной силы вид,
поэтому вам не нужно аннулировать View при вызове этих методов с новыми значениями.
Пример кода может выглядеть следующим образом:
Paint CircleFill_dah = new Paint(); // hit of dah duration
CircleFill_dah.setStyle(Paint.Style.FILL);
ValueAnimator animator_dah = ValueAnimator.ofInt(0,255);
CircleFill_dah.setColor(dahColor);
CircleFill_dah.setAlpha(0);
animator_dah.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int alphval = (int) animation.getAnimatedValue();
CircleFill_dah.setAlpha(alphval);
//we are here but are not redrawing!?
Toast.makeText(c,"setting alpha " + alphval,Toast.LENGTH_SHORT).show();
//view.postInvalidate(); // clears toast messages, but doesn't show animation
}
});
canvas.drawCircle(50, 50, 50, CircleFill_dah);
animator_dah.setDuration(100);
animator_dah.setRepeatMode(ValueAnimator.REVERSE);
animator_dah.setRepeatCount(-1);
animator_dah.start();
Фактический код на github . clearView extends View
и реализует onDraw
, вызывая Touchable.draw()
, который использует Touchable.fill()