У меня есть простое действие, которое вращает стрелку под случайным углом, и когда стрелка перестает вращаться, она мигает. Мигающий эффект - это альфа-анимация, применяемая к imageview
светящейся версии стрелки.
Он отлично работает в Lollipop
и выше, но в KitKat
, когда применяется альфа-анимация, он сводит на нет setFillAfter
завершенной анимации вращения, и стрелки мгновенно изменяются на указание прямо вверх (0 градусов)
public void Spin2 ()
{
spinning = true;
degreeEnd = rnd.nextInt(360);
RotateAnimation spinIt = new RotateAnimation(0,3600+degreeEnd, RotateAnimation.RELATIVE_TO_SELF,0.5f,RotateAnimation.RELATIVE_TO_SELF,0.5f);
spinIt.setDuration(6000);
spinIt.setFillAfter(true);
spinIt.setInterpolator(new DecelerateInterpolator());
spinIt.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
arrowLit.setVisibility(View.VISIBLE);
animBlink = new AlphaAnimation(1,0);
animBlink.setDuration(500);
animBlink.setInterpolator(new AccelerateInterpolator() );
animBlink.setRepeatCount(Animation.INFINITE);
// in KitKat this animation seems to reset the rotation..
arrowLit.startAnimation(animBlink);
spinning = false;
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
theSpinner.startAnimation(spinIt);
}
Интересно, что когда вы снова запускаете вращение, он возвращается назад туда, где он должен быть (degEnd), и начинает вращение оттуда.
Как будто он временно отменяет setFillAfter
вращения. Я пробовал различные комбинации setFillBefore
и т. Д. На анимациях. Кроме того, если я установлю мигающую анимацию на конечное число (например, 4), она остановится и останется на нуле - она не будет исправлена до тех пор, пока я не перевернусь.
Опять же, это прекрасно работает в API 20 и выше.
Спасибо за любую помощь
Andy