AlphaAnimation 在 KitKat 中旋转帧布局
AlphaAnimation Rotates Framelayout in KitKat
我有一个简单的 activity 可以将箭头旋转到随机角度,当箭头停止旋转时它会闪烁。闪烁效果是应用于 imageview
发光版箭头的 alpha 动画。
它在 Lollipop
及更高版本中工作得很好,但在 KitKat
中,当应用 alpha 动画时,它否定了已完成的旋转动画的 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);
}
有趣的是,当您再次开始旋转时,它会弹回到它应该在的位置 (degreeEnd) 并从那里开始旋转。
好像是暂时覆盖了轮换的setFillAfter
。我在动画上尝试了 setFillBefore
等的各种组合。此外,如果我将闪烁动画设置为一个有限的数字(例如 4),它将停止并保持在零——直到我重新旋转它才会正确。
同样,这在 API 20 岁及以上的人中工作得很好。
感谢您的帮助
安迪
好像跟Frame Layout
有关。一旦它脱离了等式,它就可以在 KitKat 上正常工作。
我有一个简单的 activity 可以将箭头旋转到随机角度,当箭头停止旋转时它会闪烁。闪烁效果是应用于 imageview
发光版箭头的 alpha 动画。
它在 Lollipop
及更高版本中工作得很好,但在 KitKat
中,当应用 alpha 动画时,它否定了已完成的旋转动画的 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);
}
有趣的是,当您再次开始旋转时,它会弹回到它应该在的位置 (degreeEnd) 并从那里开始旋转。
好像是暂时覆盖了轮换的setFillAfter
。我在动画上尝试了 setFillBefore
等的各种组合。此外,如果我将闪烁动画设置为一个有限的数字(例如 4),它将停止并保持在零——直到我重新旋转它才会正确。
同样,这在 API 20 岁及以上的人中工作得很好。
感谢您的帮助
安迪
好像跟Frame Layout
有关。一旦它脱离了等式,它就可以在 KitKat 上正常工作。