diff options
| author | 2015-11-20 18:49:59 -0800 | |
|---|---|---|
| committer | 2015-11-24 19:26:48 +0000 | |
| commit | ce2aef9f12f18fdc7811ff0de8c1c37177e7f645 (patch) | |
| tree | 4bea29bcab9caaa508c3b694baf9fa266fd46a4f | |
| parent | f2d7fa3a99663566446ea74266c7977dd20dae26 (diff) | |
Animate drag shadow when the drag is cancelled
Added a placeholder animation (scale and alpha going down to 0).
Final UX spec is pending.
Change-Id: I324635d270cc4d7f865c9fe9ad2802b975d1e9ca
| -rw-r--r-- | services/core/java/com/android/server/wm/DragState.java | 27 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/Session.java | 2 |
2 files changed, 24 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java index fdccc3fc8c78..0ef0e582a842 100644 --- a/services/core/java/com/android/server/wm/DragState.java +++ b/services/core/java/com/android/server/wm/DragState.java @@ -22,6 +22,7 @@ import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; +import android.view.animation.ScaleAnimation; import android.view.animation.Transformation; import android.view.animation.TranslateAnimation; import com.android.server.input.InputApplicationHandle; @@ -324,6 +325,13 @@ class DragState { cleanUpDragLw(); } + void cancelDragLw() { + if (mAnimation != null) { + return; + } + mAnimation = createCancelAnimationLocked(); + mService.scheduleAnimationLocked(); + } private void cleanUpDragLw() { broadcastDragEndedLw(); @@ -525,11 +533,11 @@ class DragState { return false; } + mTransformation.getMatrix().postTranslate( + mCurrentX - mThumbOffsetX, mCurrentY - mThumbOffsetY); final float tmpFloats[] = mService.mTmpFloats; mTransformation.getMatrix().getValues(tmpFloats); - mSurfaceControl.setPosition( - tmpFloats[Matrix.MTRANS_X] - mThumbOffsetX, - tmpFloats[Matrix.MTRANS_Y] - mThumbOffsetY); + mSurfaceControl.setPosition(tmpFloats[Matrix.MTRANS_X], tmpFloats[Matrix.MTRANS_Y]); mSurfaceControl.setAlpha(mTransformation.getAlpha()); mSurfaceControl.setMatrix(tmpFloats[Matrix.MSCALE_X], tmpFloats[Matrix.MSKEW_Y], tmpFloats[Matrix.MSKEW_X], tmpFloats[Matrix.MSCALE_Y]); @@ -539,7 +547,7 @@ class DragState { private Animation createReturnAnimationLocked() { final AnimationSet set = new AnimationSet(false); set.addAnimation(new TranslateAnimation( - mCurrentX, mOriginalX, mCurrentY, mOriginalY)); + 0, mOriginalX - mCurrentX, 0, mOriginalY - mCurrentY)); set.addAnimation(new AlphaAnimation(mOriginalAlpha, mOriginalAlpha / 2)); set.setDuration(ANIMATION_DURATION_MS); set.setInterpolator(mCubicEaseOutInterpolator); @@ -547,4 +555,15 @@ class DragState { set.start(); // Will start on the first call to getTransformation. return set; } + + private Animation createCancelAnimationLocked() { + final AnimationSet set = new AnimationSet(false); + set.addAnimation(new ScaleAnimation(1, 0, 1, 0, mThumbOffsetX, mThumbOffsetY)); + set.addAnimation(new AlphaAnimation(mOriginalAlpha, 0)); + set.setDuration(ANIMATION_DURATION_MS); + set.setInterpolator(mCubicEaseOutInterpolator); + set.initialize(0, 0, 0, 0); + set.start(); // Will start on the first call to getTransformation. + return set; + } }
\ No newline at end of file diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java index f23fcdb46258..6e2e8308ba63 100644 --- a/services/core/java/com/android/server/wm/Session.java +++ b/services/core/java/com/android/server/wm/Session.java @@ -420,7 +420,7 @@ final class Session extends IWindowSession.Stub } mService.mDragState.mDragResult = false; - mService.mDragState.endDragLw(); + mService.mDragState.cancelDragLw(); } finally { Binder.restoreCallingIdentity(ident); } |