Android 如何重新设置动画师?

Android 如何重新设置动画师?,android,animation,drawing,Android,Animation,Drawing,我使用单个Animator实例平滑地向下或向右滚动视图。首先,我在自定义视图实现中使用公共参数进行设置: private ObjectAnimator animator = new ObjectAnimator(); { animator.setTarget(this); animator.setDuration(moveDuration); } 然后我使用两种方法来向下和向右移动 public void moveRight() { if( animator.isRu

我使用单个Animator实例平滑地向下或向右滚动视图。首先,我在自定义视图实现中使用公共参数进行设置:

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();
}
我发现,只有第一次调用的方法才能正确工作。另一个方法的工作原理是错误的,好像第一个运行的方法在animator对象中留下了一些痕迹


如何删除这些痕迹并重新编程animator从右向下滚动,反之亦然?

我也有这个问题。出于某种原因,第二次使用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();
Property mtransationxproperty=Property.of(View.class,
Float.class,“translationX”);
Property mScaleXProperty=Property.of(View.class,
Float.class,“scaleX”);
...
setProperty(mtransationxproperty);
设置浮点值(500f,0f);
animator.start();
...
animator.setProperty(mScaleXProperty);
设置浮点值(1f,0f);
animator.start();

我能够使用以下代码重置值:

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();
final AnimatorSet animate=(AnimatorSet)AnimatorInflater.loadAnimator(这是R.anim.anim_移动);
列表动画=animate.getChildAnimations();
对于(int i=0;i
提供的代码没有帮助..演示您如何使用此代码。。在哪里调用方法?我从两个按钮通过它们的
onClick()
处理程序调用此方法。