我使用单个Animator实例来平滑地向下或向右滚动视图。首先,我在自定义View实现中使用通用参数进行设置:
private ObjectAnimator animator = new ObjectAnimator();
{
animator.setTarget(this);
animator.setDuration(moveDuration);
}
然后我使用两种方法向下和向右移动
public void moveRight() {
if( animator.isRunning() ) animator.end();
animator.setPropertyName("scrollX");
animator.setIntValues(getScrollX(), getScrollX() + cellWidth);
animator.start();
}
public void moveDown() {
if( animator.isRunning() ) animator.end();
animator.setPropertyName("scrollY");
animator.setIntValues(getScrollY(), getScrollY() + cellHeight);
animator.start();
}
我发现,只有第一个被调用的方法才能正常工作。另一个错误,好像第一个run方法在动画对象中留下了一些痕迹。
如何删除这些痕迹并重新编程动画师从右向下滚动,反之亦然?
答案 0 :(得分:1)
我也有这个问题。出于某种原因,第二次使用setPropertyName()似乎并没有清除以前的属性和/或值。
使用setProperty()代替修复此问题,例如:
Property<View, Float> mTranslationXProperty = Property.of(View.class,
Float.class, "translationX");
Property<View, Float> mScaleXProperty = Property.of(View.class,
Float.class, "scaleX");
...
animator.setProperty(mTranslationXProperty);
animator.setFloatValues(500f, 0f);
animator.start();
...
animator.setProperty(mScaleXProperty);
animator.setFloatValues(1f, 0f);
animator.start();
答案 1 :(得分:0)
我可以使用以下代码重置值:
final AnimatorSet animate = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.anim.anim_move);
List<Animator> animations = animate.getChildAnimations();
for (int i = 0; i < animations.size(); i++) {
ObjectAnimator animator = (ObjectAnimator) animations.get(i);
if (animator.getPropertyName().contentEquals("y")) {
animator.setFloatValues(0f, 500f);
}
}
animate.setTarget(starlightImageView);
animate.start();