diff options
author | George Mount <mount@google.com> | 2015-02-26 17:41:23 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-02-26 17:41:24 +0000 |
commit | ccf3edb3ab9479bef246391cb811bf3f5bdbef97 (patch) | |
tree | 3ef00c70acaa6b6ee90f2a76c17fe6c70df315cf /core/java/android/app | |
parent | abc03c7ae8c9c628de319819a10ce2cbaedf1c86 (diff) | |
parent | 42161c5cb4f5f36cf83c8af3f20db70a70850a88 (diff) | |
download | frameworks_base-ccf3edb3ab9479bef246391cb811bf3f5bdbef97.zip frameworks_base-ccf3edb3ab9479bef246391cb811bf3f5bdbef97.tar.gz frameworks_base-ccf3edb3ab9479bef246391cb811bf3f5bdbef97.tar.bz2 |
Merge "Fix target location on nested shared elements."
Diffstat (limited to 'core/java/android/app')
-rw-r--r-- | core/java/android/app/ActivityTransitionCoordinator.java | 48 |
1 files changed, 16 insertions, 32 deletions
diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java index e3b27b5..2939322 100644 --- a/core/java/android/app/ActivityTransitionCoordinator.java +++ b/core/java/android/app/ActivityTransitionCoordinator.java @@ -206,7 +206,6 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { private ArrayList<GhostViewListeners> mGhostViewListeners = new ArrayList<GhostViewListeners>(); private ArrayMap<View, Float> mOriginalAlphas = new ArrayMap<View, Float>(); - final private ArrayList<View> mRootSharedElements = new ArrayList<View>(); private ArrayList<Matrix> mSharedElementParentMatrices; public ActivityTransitionCoordinator(Window window, @@ -253,17 +252,10 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { final String name = sharedElements.keyAt(i); if (isFirstRun && (view == null || !view.isAttachedToWindow() || name == null)) { sharedElements.removeAt(i); - } else { - if (!isNested(view, sharedElements)) { - mSharedElementNames.add(name); - mSharedElements.add(view); - sharedElements.removeAt(i); - if (isFirstRun) { - // We need to keep track which shared elements are roots - // and which are nested. - mRootSharedElements.add(view); - } - } + } else if (!isNested(view, sharedElements)) { + mSharedElementNames.add(name); + mSharedElements.add(view); + sharedElements.removeAt(i); } } isFirstRun = false; @@ -520,24 +512,9 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } private void getSharedElementParentMatrix(View view, Matrix matrix) { - final boolean isNestedInOtherSharedElement = !mRootSharedElements.contains(view); - final boolean useParentMatrix; - if (isNestedInOtherSharedElement) { - useParentMatrix = true; - } else { - final int index = mSharedElementParentMatrices == null ? -1 - : mSharedElements.indexOf(view); - if (index < 0) { - useParentMatrix = true; - } else { - // The indices of mSharedElementParentMatrices matches the - // mSharedElement matrices. - Matrix parentMatrix = mSharedElementParentMatrices.get(index); - matrix.set(parentMatrix); - useParentMatrix = false; - } - } - if (useParentMatrix) { + final int index = mSharedElementParentMatrices == null ? -1 + : mSharedElements.indexOf(view); + if (index < 0) { matrix.reset(); ViewParent viewParent = view.getParent(); if (viewParent instanceof ViewGroup) { @@ -545,6 +522,11 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { ViewGroup parent = (ViewGroup) viewParent; parent.transformMatrixToLocal(matrix); } + } else { + // The indices of mSharedElementParentMatrices matches the + // mSharedElement matrices. + Matrix parentMatrix = mSharedElementParentMatrices.get(index); + matrix.set(parentMatrix); } } @@ -701,7 +683,6 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { mResultReceiver = null; mPendingTransition = null; mListener = null; - mRootSharedElements.clear(); mSharedElementParentMatrices = null; } @@ -817,9 +798,12 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { ViewGroup decor = getDecor(); if (decor != null) { boolean moveWithParent = moveSharedElementWithParent(); + Matrix tempMatrix = new Matrix(); for (int i = 0; i < numSharedElements; i++) { View view = mSharedElements.get(i); - GhostView.addGhost(view, decor); + tempMatrix.reset(); + mSharedElementParentMatrices.get(i).invert(tempMatrix); + GhostView.addGhost(view, decor, tempMatrix); ViewGroup parent = (ViewGroup) view.getParent(); if (moveWithParent && !isInTransitionGroup(parent, decor)) { GhostViewListeners listener = new GhostViewListeners(view, parent, decor); |