OSDN Git Service

Animate drag shadow when the drag is cancelled
authorVladislav Kaznacheev <kaznacheev@google.com>
Sat, 21 Nov 2015 02:49:59 +0000 (18:49 -0800)
committerVladislav Kaznacheev <kaznacheev@google.com>
Tue, 24 Nov 2015 19:26:48 +0000 (19:26 +0000)
Added a placeholder animation (scale and alpha going down to 0).
Final UX spec is pending.

Change-Id: I324635d270cc4d7f865c9fe9ad2802b975d1e9ca

services/core/java/com/android/server/wm/DragState.java
services/core/java/com/android/server/wm/Session.java

index fdccc3f..0ef0e58 100644 (file)
@@ -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
index f23fcdb..6e2e830 100644 (file)
@@ -420,7 +420,7 @@ final class Session extends IWindowSession.Stub
                 }
 
                 mService.mDragState.mDragResult = false;
-                mService.mDragState.endDragLw();
+                mService.mDragState.cancelDragLw();
             } finally {
                 Binder.restoreCallingIdentity(ident);
             }