標籤:android animation scale 迴圈播放
在開發Android的Animator時遇到如下問題:
1. 關於Animator的迴圈播放:
在Animator動畫中有迴圈的設定方法setRepeatCount(ValueAnimator.INFINITE) , 而對於AnimatorSet需要實現迴圈播放,實現方法如下代碼:
private AtomicBoolean isStart = new AtomicBoolean(false);
animatorSet.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { if (isStart.get()) { animation.start(); } } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { }});animatorSet.start();public void stopRecognizerViewAnim() { isStart.set(false);}
2 . 關於View的縮放:
對於View的縮放一般使用scale。如果縮放的是GroupView,則內部的組件也隨著縮放。如果不希望縮放內部的view,而僅僅是寬度或高度的縮放, 實現方法如下代碼:
mAnimatorSet = new AnimatorSet();ValueAnimator height = ValueAnimator.ofObject(new WidthEvaluator(), mCurrWidth, mPreWidth);height.setDuration(DURATION);mAnimatorSet.playTogether(height);mAnimatorSet.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { }});mAnimatorSet.start();
private class WidthEvaluator extends IntEvaluator { @Override public Integer evaluate(float fraction, Integer startValue, Integer endValue) { int value = super.evaluate(fraction, startValue, endValue); ViewGroup.LayoutParams layoutParams = getLayoutParams(); layoutParams.width = value; setLayoutParams(layoutParams); return value; }}
3. 如果同一個AnimatorSet中多個Animator需要設定before() 或者after() ,不能再同一個AnimatorSet中設定多個before() 或者after()。例如: play(AAnimator).before(BAnimator).before(CAnimator).. 是錯誤的。 這個是我個人的理解,如果不正確,請留言告知。
本文出自 “Android - 靜心之作” 部落格,請務必保留此出處http://6246534.blog.51cto.com/6236534/1860430
Android動畫Animator開發問題