嗨我使用AnimatorSet和ValueAnimator將多個動畫應用於視圖。Android多動畫設置重置
當用戶觸摸視圖時,連續動畫將應用於視圖。當用戶在視圖上移動他的手指時,我會這樣做以獲得「縮放效果」。
該視圖是一個自定義畫廊。
這裏是動畫代碼:我有一個onTouchListener和行動的舉動我先後調用此方法增加或減少mScaleFactor
private void createAnim(final View v) {
animating = true;
if (D)
Log.i(TAG, "sarting animation");
try {
v.clearAnimation();
v.getAnimation().reset();
} catch (Exception e) {
}
set = new AnimatorSet();
set.addListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
if (D)
Log.i(TAG, "Animation ended");
animating = false;
}
@Override
public void onAnimationCancel(Animator animation) {
animating = false;
if (D)
Log.i(TAG, "Animation cancelled");
}
});
set.setDuration(100);
ValueAnimator v1 = ObjectAnimator.ofFloat(v, "scaleX", mScaleFactor);
ValueAnimator v2 = ObjectAnimator.ofFloat(v, "scaleY", mScaleFactor);
animationList.add(v1);
animationList.add(v2);
set.playTogether(v1, v2);
set.start()
}
。
當用戶釋放手指時,我希望視圖回到之前的狀態,我的意思是清除應用的所有動畫,就好像它們從未應用於視圖一樣。問題是你可以很容易地做到這一點,但對於許多人來說,我無法找到正確的方式。這是我曾嘗試過的:
- 將動畫添加到ArrayList中,並對它們中的每一個執行animation.reverse(),並將延遲+100添加到它們中的每一個,以便一個接一個執行,但結束結果與動畫之前看起來不完全一樣。
v.clearAnimation();只取消最後的動畫 v.getAnimation()。reset();相同只適用於最後/活動動畫。 有沒有一種方法可以像在任何動畫開始之前那樣獲取視圖? 非常感謝
謝謝男人!!!完美的作品! – vallllll 2012-08-16 14:32:53