我想实现一些RotatingImageView,我有一个看起来像这样的动画:
public void init() {
mCurrentRotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.51f);
mCurrentRotateAnimation.setDuration(0);
mCurrentRotateAnimation.setRepeatCount(Animation.INFINITE);
mCurrentRotateAnimation.setRepeatMode(Animation.RESTART);
mCurrentRotateAnimation.setInterpolator(new InfoInterpolator());
startAnimation(mCurrentRotateAnimation);
}
当这个RotatingImageView开始在ViewSwitcher(ViewAnimator)中使用时出现困难,并且ViewSwitcher根据它所拥有的输入/输出动画改变自己的动画(基本上通过调用startAnimation()他自己的输入/输出动画,覆盖了我的旋转动画:
// ViewSwitcher/ViewAnimator code changing the animation
void showOnly(int childIndex, boolean animate) {
final int count = getChildCount();
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (i == childIndex) {
if (animate && mInAnimation != null) {
child.startAnimation(mInAnimation);
}
child.setVisibility(View.VISIBLE);
mFirstTime = false;
} else {
if (animate && mOutAnimation != null && child.getVisibility() == View.VISIBLE) {
child.startAnimation(mOutAnimation);
} else if (child.getAnimation() == mInAnimation)
child.clearAnimation();
child.setVisibility(View.GONE);
}
}
}
我尝试保留假插补器的输入以“知道”旋转动画停止的位置,并在ViewSwitcher调用startAnimation时恢复它,但旋转动画中仍然存在“跳跃”!
如何让ImageView一直旋转,添加和删除来自ViewSwitcher / ViewAnimator 的正确输入/输出动画,而不停止旋转动画?
提前多多感谢!
答案 0 :(得分:1)
如果您使用旧动画系统同时通过ViewSwitcher更改其可见性,您的动画视图将始终闪烁。 解决方案是使用ViewPropertyAnimator实际修改视图的属性,这就是为什么你的视图即使在被viewSwitcher隐藏之后也会保持其位置(这里是它的角度)。
以下是基于RotatingImageView的示例,如果您的目标是android&lt; 11你应该使用NineOldAndroids。
@SuppressLint("NewApi")
private void init() {
ObjectAnimator rotationAnimator = (ObjectAnimator) AnimatorInflater.loadAnimator(getContext(), R.animator.rotation);
rotationAnimator.setTarget(this);
rotationAnimator.start();
}
这里是rotation.xml(放在res / animator中)
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:propertyName="rotation"
android:repeatCount="infinite"
android:repeatMode="restart"
android:interpolator="@android:anim/linear_interpolator"
android:valueTo="360"
android:valueType="floatType" />