我已经为我的按钮使用了旋转动画。它在Android 5.0及更高版本上运行良好但在Android 4.4版本上测试时。它眨眼,不旋转。 AS其他人建议我尝试使用Layer类型,之后填充并填充。但没有任何作用。以下是我的代码:
<?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);
}
答案 0 :(得分:1)
这听起来像是硬件加速问题:尝试将LayerType
/ View
的{{1}}设置为Button
LayerType.SOFTWARE
我还建议尝试稍微增加动画的持续时间(例如最多400毫秒)。
答案 1 :(得分:1)
是的,我找到了自己问题的答案。我尝试过在不同的地方设置Layer类型和许多其他解决方案。但有人建议我使用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();