2012-05-17 72 views
2

我正在使用單個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(); 
} 

我發現,只有第一個調用的方法正常工作。另一個作品錯誤,就好像第一次運行方法在動畫製作器對象中留下了一些痕跡。

如何刪除這些痕跡並將動畫製作者從滾動權限重新編程爲向下權限,反之亦然?

+0

提供的代碼是沒有幫助的.. – Ronnie

+0

演示如何爲U使用此代碼..你在哪裏調用方法? – Ronnie

+0

我通過其onClick()處理程序從2個按鈕中調用此方法。 –

回答

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(); 
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();