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 上正常工作。