旋转动画不适用于 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
/Button
的 LayerType
设置为 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();
我为我的按钮使用了旋转动画。它在 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
/Button
的 LayerType
设置为 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();