旋转动画在Android 4.4.4上无法工作

3

我在按钮上使用了旋转动画。在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);
    }
2个回答

1
这听起来像是硬件加速问题:尝试将您的View/ButtonLayerType设置为LayerType.SOFTWARE
myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

我建议尝试略微增加动画的持续时间(例如,增加到400毫秒)。

1

是的,我找到了自己问题的答案。我尝试设置图层类型和其他许多不同地方提供的解决方案。但有人建议我使用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();

ANIMATION_NAME是什么? - Prashant Kumar
什么是 ANIMATION_NAME?什么是 exchangeValues - Divers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接