旋转动画不适用于 Android 4.4.4

Rotate Animation is not working on Android 4.4.4

我为我的按钮使用了旋转动画。它在 Android 5.0 及更高版本上工作正常,但在 Android 4.4 版本上测试时。它闪烁并且不旋转。正如其他一些人所建议的那样,我尝试使用图层类型,先填充后填充。但没有任何效果。下面是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
  <rotate
    android:duration="200"
    android:fromDegrees="0"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:startOffset="0"
    android:toDegrees="180"
    android:repeatMode="reverse">
  </rotate>
</set>

Animation mAnim = AnimationUtils.loadAnimation(getActivity(), R.anim.rotate);

    mAnim.setAnimationListener(new Animation.AnimationListener() {
      @Override
      public void onAnimationStart(Animation animation) {

      }

      @Override
      public void onAnimationEnd(Animation animation) {
        exchangeValues();
      }

      @Override
      public void onAnimationRepeat(Animation animation) {

      }
    });
    if (floatingActionButton != null) {
      floatingActionButton.startAnimation(mAnim);
    }

这听起来像是一个 硬件加速 问题:尝试将 View/ButtonLayerType 设置为 LayerType.SOFTWARE

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

我还建议尝试稍微增加动画的持续时间(例如最多 400 毫秒)。

是的,我找到了我自己问题的答案。我试过设置图层类型和在不同地方提供的许多其他解决方案。但是有人建议我使用 ObjectAnimator,它对我来说就像一种魅力。这是代码

ObjectAnimator floatingButtonAnimator = ObjectAnimator.ofFloat(floatingActionButton,
    ANIMATION_NAME, ANIMATION_STARTING_DEGREE, ANIMATION_ENDING_DEGREE);
floatingButtonAnimator.setDuration(ANIMATION_DURATION).addListener(new AnimatorListenerAdapter() {
  @Override
  public void onAnimationStart(Animator animation) {
    super.onAnimationStart(animation);
  }

  @Override
  public void onAnimationEnd(Animator animation) {
    super.onAnimationEnd(animation);
    exchangeValues();
  }
});
floatingButtonAnimator.start();