@@ -96,6 +96,9 @@ public class MiClockView extends View {
9696 private float mCameraRotateY ;
9797 /* camera旋转的最大角度 */
9898 private float mMaxCameraRotate = 10 ;
99+ /* 手指松开时时钟晃动的动画 */
100+ private ValueAnimator mShakeAnimX ;
101+ private ValueAnimator mShakeAnimY ;
99102
100103 public MiClockView (Context context ) {
101104 this (context , null );
@@ -223,15 +226,15 @@ public boolean onTouchEvent(MotionEvent event) {
223226 break ;
224227 case MotionEvent .ACTION_UP :
225228 //松开手指,时钟复原并伴随晃动动画
226- ValueAnimator animX = getShakeAnim (mCameraRotateX , 0 );
227- animX .addUpdateListener (new ValueAnimator .AnimatorUpdateListener () {
229+ mShakeAnimX = getShakeAnim (mCameraRotateX , 0 );
230+ mShakeAnimX .addUpdateListener (new ValueAnimator .AnimatorUpdateListener () {
228231 @ Override
229232 public void onAnimationUpdate (ValueAnimator valueAnimator ) {
230233 mCameraRotateX = (float ) valueAnimator .getAnimatedValue ();
231234 }
232235 });
233- ValueAnimator animY = getShakeAnim (mCameraRotateY , 0 );
234- animY .addUpdateListener (new ValueAnimator .AnimatorUpdateListener () {
236+ mShakeAnimY = getShakeAnim (mCameraRotateY , 0 );
237+ mShakeAnimY .addUpdateListener (new ValueAnimator .AnimatorUpdateListener () {
235238 @ Override
236239 public void onAnimationUpdate (ValueAnimator valueAnimator ) {
237240 mCameraRotateY = (float ) valueAnimator .getAnimatedValue ();
@@ -247,6 +250,10 @@ public void onAnimationUpdate(ValueAnimator valueAnimator) {
247250 * 注意view坐标与camera坐标方向的转换
248251 */
249252 private void getCameraRotate (MotionEvent event ) {
253+ if (mShakeAnimX != null && mShakeAnimX .isRunning ()) {
254+ mShakeAnimX .cancel ();
255+ mShakeAnimY .cancel ();
256+ }
250257 float rotateX = -(event .getY () - getHeight () / 2 );
251258 float rotateY = (event .getX () - getWidth () / 2 );
252259 //求出此时旋转的大小与半径之比
0 commit comments