Loading core/java/android/app/ActivityTransitionCoordinator.java +34 −23 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ import android.view.ViewTreeObserver; import android.view.Window; import android.widget.ImageView; import com.android.internal.view.OneShotPreDrawListener; import java.util.ArrayList; import java.util.Collection; Loading Loading @@ -570,16 +572,9 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { protected void scheduleSetSharedElementEnd(final ArrayList<View> snapshots) { final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { decorView.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(decorView, () -> { notifySharedElementEnd(snapshots); return true; } } ); }); } } Loading Loading @@ -816,6 +811,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { if (moveWithParent && !isInTransitionGroup(parent, decor)) { GhostViewListeners listener = new GhostViewListeners(view, parent, decor); parent.getViewTreeObserver().addOnPreDrawListener(listener); parent.addOnAttachStateChangeListener(listener); mGhostViewListeners.add(listener); } } Loading @@ -842,8 +838,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { int numListeners = mGhostViewListeners.size(); for (int i = 0; i < numListeners; i++) { GhostViewListeners listener = mGhostViewListeners.get(i); ViewGroup parent = (ViewGroup) listener.getView().getParent(); parent.getViewTreeObserver().removeOnPreDrawListener(listener); listener.removeListener(); } mGhostViewListeners.clear(); Loading Loading @@ -874,14 +869,8 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { protected void scheduleGhostVisibilityChange(final int visibility) { final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { decorView.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(decorView, () -> { setGhostVisibility(visibility); return true; } }); } } Loading Loading @@ -988,16 +977,19 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } } private static class GhostViewListeners implements ViewTreeObserver.OnPreDrawListener { private static class GhostViewListeners implements ViewTreeObserver.OnPreDrawListener, View.OnAttachStateChangeListener { private View mView; private ViewGroup mDecor; private View mParent; private Matrix mMatrix = new Matrix(); private ViewTreeObserver mViewTreeObserver; public GhostViewListeners(View view, View parent, ViewGroup decor) { mView = view; mParent = parent; mDecor = decor; mViewTreeObserver = parent.getViewTreeObserver(); } public View getView() { Loading @@ -1008,13 +1000,32 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { public boolean onPreDraw() { GhostView ghostView = GhostView.getGhost(mView); if (ghostView == null) { mParent.getViewTreeObserver().removeOnPreDrawListener(this); removeListener(); } else { GhostView.calculateMatrix(mView, mDecor, mMatrix); ghostView.setMatrix(mMatrix); } return true; } public void removeListener() { if (mViewTreeObserver.isAlive()) { mViewTreeObserver.removeOnPreDrawListener(this); } else { mParent.getViewTreeObserver().removeOnPreDrawListener(this); } mParent.removeOnAttachStateChangeListener(this); } @Override public void onViewAttachedToWindow(View v) { mViewTreeObserver = v.getViewTreeObserver(); } @Override public void onViewDetachedFromWindow(View v) { removeListener(); } } static class SharedElementOriginalState { Loading core/java/android/app/ActivityTransitionState.java +8 −13 Original line number Diff line number Diff line Loading @@ -22,9 +22,10 @@ import android.transition.Transition; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.Window; import com.android.internal.view.OneShotPreDrawListener; import java.lang.ref.WeakReference; import java.util.ArrayList; Loading Loading @@ -321,17 +322,11 @@ class ActivityTransitionState { } if (delayExitBack && decor != null) { final ViewGroup finalDecor = decor; decor.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { finalDecor.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(decor, () -> { if (mReturnExitCoordinator != null) { mReturnExitCoordinator.startExit(activity.mResultCode, activity.mResultData); } return true; } }); } else { mReturnExitCoordinator.startExit(activity.mResultCode, activity.mResultData); Loading core/java/android/app/EnterTransitionCoordinator.java +27 −42 Original line number Diff line number Diff line Loading @@ -30,10 +30,11 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewGroupOverlay; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnPreDrawListener; import android.view.Window; import android.view.accessibility.AccessibilityEvent; import com.android.internal.view.OneShotPreDrawListener; import java.util.ArrayList; /** Loading @@ -58,7 +59,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { private boolean mAreViewsReady; private boolean mIsViewsTransitionStarted; private Transition mEnterViewsTransition; private OnPreDrawListener mViewsReadyListener; private OneShotPreDrawListener mViewsReadyListener; private final boolean mIsCrossTask; public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver, Loading @@ -74,13 +75,18 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { mResultReceiver.send(MSG_SET_REMOTE_RECEIVER, resultReceiverBundle); final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver().addOnPreDrawListener( final ViewTreeObserver viewTreeObserver = decorView.getViewTreeObserver(); viewTreeObserver.addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { if (mIsReadyForTransition) { if (viewTreeObserver.isAlive()) { viewTreeObserver.removeOnPreDrawListener(this); } else { decorView.getViewTreeObserver().removeOnPreDrawListener(this); } } return mIsReadyForTransition; } }); Loading Loading @@ -147,16 +153,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { (sharedElements.isEmpty() || !sharedElements.valueAt(0).isLayoutRequested()))) { viewsReady(sharedElements); } else { mViewsReadyListener = new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { mViewsReadyListener = OneShotPreDrawListener.add(decor, () -> { mViewsReadyListener = null; decor.getViewTreeObserver().removeOnPreDrawListener(this); viewsReady(sharedElements); return true; } }; decor.getViewTreeObserver().addOnPreDrawListener(mViewsReadyListener); }); decor.invalidate(); } } Loading Loading @@ -206,18 +206,12 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { moveSharedElementsToOverlay(); mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state); } else if (decorView != null) { decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { decorView.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(decorView, () -> { if (mResultReceiver != null) { Bundle state = captureSharedElementState(); moveSharedElementsToOverlay(); mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state); } return true; } }); } if (allowOverlappingTransitions()) { Loading Loading @@ -271,7 +265,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { mIsReadyForTransition = true; final ViewGroup decor = getDecor(); if (decor != null && mViewsReadyListener != null) { decor.getViewTreeObserver().removeOnPreDrawListener(mViewsReadyListener); mViewsReadyListener.removeListener(); mViewsReadyListener = null; } showViews(mTransitioningViews, true); Loading Loading @@ -457,19 +451,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { public void onSharedElementsReady() { final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { decorView.getViewTreeObserver().removeOnPreDrawListener(this); startTransition(new Runnable() { @Override public void run() { OneShotPreDrawListener.add(decorView, () -> { startTransition(() -> { startSharedElementTransition(sharedElementState); } }); return false; } }); decorView.invalidate(); } Loading core/java/android/app/ExitTransitionCoordinator.java +5 −10 Original line number Diff line number Diff line Loading @@ -34,9 +34,10 @@ import android.transition.Transition; import android.transition.TransitionManager; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.Window; import com.android.internal.view.OneShotPreDrawListener; import java.util.ArrayList; /** Loading Loading @@ -168,14 +169,8 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { }); final ArrayList<View> sharedElementSnapshots = createSnapshots(mExitSharedElementBundle, mSharedElementNames); decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { decorView.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(decorView, () -> { setSharedElementState(mExitSharedElementBundle, sharedElementSnapshots); return true; } }); setGhostVisibility(View.INVISIBLE); scheduleGhostVisibilityChange(View.INVISIBLE); Loading core/java/android/app/FragmentTransition.java +50 −76 Original line number Diff line number Diff line Loading @@ -24,7 +24,8 @@ import android.util.ArrayMap; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import com.android.internal.view.OneShotPreDrawListener; import java.util.ArrayList; import java.util.Collection; Loading Loading @@ -320,15 +321,8 @@ class FragmentTransition { && exitingFragment.mHidden && exitingFragment.mHiddenChanged) { exitingFragment.setHideReplaced(true); final View fragmentView = exitingFragment.getView(); final ViewGroup container = exitingFragment.mContainer; container.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { container.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(exitingFragment.mContainer, () -> { setViewVisibility(exitingViews, View.INVISIBLE); return true; } }); exitTransition.addListener(new Transition.TransitionListenerAdapter() { @Override Loading Loading @@ -364,12 +358,7 @@ class FragmentTransition { final Transition enterTransition, final ArrayList<View> enteringViews, final Transition exitTransition, final ArrayList<View> exitingViews) { sceneRoot.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(sceneRoot, () -> { if (enterTransition != null) { enterTransition.removeTarget(nonExistentView); ArrayList<View> views = configureEnteringExitingViews( Loading @@ -384,9 +373,6 @@ class FragmentTransition { exitingViews.clear(); exitingViews.add(nonExistentView); } return true; } }); } Loading Loading @@ -541,18 +527,12 @@ class FragmentTransition { epicenterView = null; } sceneRoot.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(sceneRoot, () -> { callSharedElementStartEnd(inFragment, outFragment, inIsPop, inSharedElements, false); if (epicenterView != null) { epicenterView.getBoundsOnScreen(epicenter); } return true; } }); return sharedElementTransition; } Loading Loading @@ -643,11 +623,7 @@ class FragmentTransition { TransitionSet finalSharedElementTransition = sharedElementTransition; sceneRoot.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(sceneRoot, () -> { ArrayMap<String, View> inSharedElements = captureInSharedElements( nameOverrides, finalSharedElementTransition, fragments); Loading @@ -670,8 +646,6 @@ class FragmentTransition { inEpicenterView.getBoundsOnScreen(inEpicenter); } } return true; } }); return sharedElementTransition; } Loading Loading
core/java/android/app/ActivityTransitionCoordinator.java +34 −23 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ import android.view.ViewTreeObserver; import android.view.Window; import android.widget.ImageView; import com.android.internal.view.OneShotPreDrawListener; import java.util.ArrayList; import java.util.Collection; Loading Loading @@ -570,16 +572,9 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { protected void scheduleSetSharedElementEnd(final ArrayList<View> snapshots) { final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { decorView.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(decorView, () -> { notifySharedElementEnd(snapshots); return true; } } ); }); } } Loading Loading @@ -816,6 +811,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { if (moveWithParent && !isInTransitionGroup(parent, decor)) { GhostViewListeners listener = new GhostViewListeners(view, parent, decor); parent.getViewTreeObserver().addOnPreDrawListener(listener); parent.addOnAttachStateChangeListener(listener); mGhostViewListeners.add(listener); } } Loading @@ -842,8 +838,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { int numListeners = mGhostViewListeners.size(); for (int i = 0; i < numListeners; i++) { GhostViewListeners listener = mGhostViewListeners.get(i); ViewGroup parent = (ViewGroup) listener.getView().getParent(); parent.getViewTreeObserver().removeOnPreDrawListener(listener); listener.removeListener(); } mGhostViewListeners.clear(); Loading Loading @@ -874,14 +869,8 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { protected void scheduleGhostVisibilityChange(final int visibility) { final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { decorView.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(decorView, () -> { setGhostVisibility(visibility); return true; } }); } } Loading Loading @@ -988,16 +977,19 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { } } private static class GhostViewListeners implements ViewTreeObserver.OnPreDrawListener { private static class GhostViewListeners implements ViewTreeObserver.OnPreDrawListener, View.OnAttachStateChangeListener { private View mView; private ViewGroup mDecor; private View mParent; private Matrix mMatrix = new Matrix(); private ViewTreeObserver mViewTreeObserver; public GhostViewListeners(View view, View parent, ViewGroup decor) { mView = view; mParent = parent; mDecor = decor; mViewTreeObserver = parent.getViewTreeObserver(); } public View getView() { Loading @@ -1008,13 +1000,32 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { public boolean onPreDraw() { GhostView ghostView = GhostView.getGhost(mView); if (ghostView == null) { mParent.getViewTreeObserver().removeOnPreDrawListener(this); removeListener(); } else { GhostView.calculateMatrix(mView, mDecor, mMatrix); ghostView.setMatrix(mMatrix); } return true; } public void removeListener() { if (mViewTreeObserver.isAlive()) { mViewTreeObserver.removeOnPreDrawListener(this); } else { mParent.getViewTreeObserver().removeOnPreDrawListener(this); } mParent.removeOnAttachStateChangeListener(this); } @Override public void onViewAttachedToWindow(View v) { mViewTreeObserver = v.getViewTreeObserver(); } @Override public void onViewDetachedFromWindow(View v) { removeListener(); } } static class SharedElementOriginalState { Loading
core/java/android/app/ActivityTransitionState.java +8 −13 Original line number Diff line number Diff line Loading @@ -22,9 +22,10 @@ import android.transition.Transition; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.Window; import com.android.internal.view.OneShotPreDrawListener; import java.lang.ref.WeakReference; import java.util.ArrayList; Loading Loading @@ -321,17 +322,11 @@ class ActivityTransitionState { } if (delayExitBack && decor != null) { final ViewGroup finalDecor = decor; decor.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { finalDecor.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(decor, () -> { if (mReturnExitCoordinator != null) { mReturnExitCoordinator.startExit(activity.mResultCode, activity.mResultData); } return true; } }); } else { mReturnExitCoordinator.startExit(activity.mResultCode, activity.mResultData); Loading
core/java/android/app/EnterTransitionCoordinator.java +27 −42 Original line number Diff line number Diff line Loading @@ -30,10 +30,11 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewGroupOverlay; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnPreDrawListener; import android.view.Window; import android.view.accessibility.AccessibilityEvent; import com.android.internal.view.OneShotPreDrawListener; import java.util.ArrayList; /** Loading @@ -58,7 +59,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { private boolean mAreViewsReady; private boolean mIsViewsTransitionStarted; private Transition mEnterViewsTransition; private OnPreDrawListener mViewsReadyListener; private OneShotPreDrawListener mViewsReadyListener; private final boolean mIsCrossTask; public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver, Loading @@ -74,13 +75,18 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { mResultReceiver.send(MSG_SET_REMOTE_RECEIVER, resultReceiverBundle); final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver().addOnPreDrawListener( final ViewTreeObserver viewTreeObserver = decorView.getViewTreeObserver(); viewTreeObserver.addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { if (mIsReadyForTransition) { if (viewTreeObserver.isAlive()) { viewTreeObserver.removeOnPreDrawListener(this); } else { decorView.getViewTreeObserver().removeOnPreDrawListener(this); } } return mIsReadyForTransition; } }); Loading Loading @@ -147,16 +153,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { (sharedElements.isEmpty() || !sharedElements.valueAt(0).isLayoutRequested()))) { viewsReady(sharedElements); } else { mViewsReadyListener = new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { mViewsReadyListener = OneShotPreDrawListener.add(decor, () -> { mViewsReadyListener = null; decor.getViewTreeObserver().removeOnPreDrawListener(this); viewsReady(sharedElements); return true; } }; decor.getViewTreeObserver().addOnPreDrawListener(mViewsReadyListener); }); decor.invalidate(); } } Loading Loading @@ -206,18 +206,12 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { moveSharedElementsToOverlay(); mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state); } else if (decorView != null) { decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { decorView.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(decorView, () -> { if (mResultReceiver != null) { Bundle state = captureSharedElementState(); moveSharedElementsToOverlay(); mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state); } return true; } }); } if (allowOverlappingTransitions()) { Loading Loading @@ -271,7 +265,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { mIsReadyForTransition = true; final ViewGroup decor = getDecor(); if (decor != null && mViewsReadyListener != null) { decor.getViewTreeObserver().removeOnPreDrawListener(mViewsReadyListener); mViewsReadyListener.removeListener(); mViewsReadyListener = null; } showViews(mTransitioningViews, true); Loading Loading @@ -457,19 +451,10 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { public void onSharedElementsReady() { final View decorView = getDecor(); if (decorView != null) { decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { decorView.getViewTreeObserver().removeOnPreDrawListener(this); startTransition(new Runnable() { @Override public void run() { OneShotPreDrawListener.add(decorView, () -> { startTransition(() -> { startSharedElementTransition(sharedElementState); } }); return false; } }); decorView.invalidate(); } Loading
core/java/android/app/ExitTransitionCoordinator.java +5 −10 Original line number Diff line number Diff line Loading @@ -34,9 +34,10 @@ import android.transition.Transition; import android.transition.TransitionManager; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.Window; import com.android.internal.view.OneShotPreDrawListener; import java.util.ArrayList; /** Loading Loading @@ -168,14 +169,8 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator { }); final ArrayList<View> sharedElementSnapshots = createSnapshots(mExitSharedElementBundle, mSharedElementNames); decorView.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { decorView.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(decorView, () -> { setSharedElementState(mExitSharedElementBundle, sharedElementSnapshots); return true; } }); setGhostVisibility(View.INVISIBLE); scheduleGhostVisibilityChange(View.INVISIBLE); Loading
core/java/android/app/FragmentTransition.java +50 −76 Original line number Diff line number Diff line Loading @@ -24,7 +24,8 @@ import android.util.ArrayMap; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import com.android.internal.view.OneShotPreDrawListener; import java.util.ArrayList; import java.util.Collection; Loading Loading @@ -320,15 +321,8 @@ class FragmentTransition { && exitingFragment.mHidden && exitingFragment.mHiddenChanged) { exitingFragment.setHideReplaced(true); final View fragmentView = exitingFragment.getView(); final ViewGroup container = exitingFragment.mContainer; container.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { container.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(exitingFragment.mContainer, () -> { setViewVisibility(exitingViews, View.INVISIBLE); return true; } }); exitTransition.addListener(new Transition.TransitionListenerAdapter() { @Override Loading Loading @@ -364,12 +358,7 @@ class FragmentTransition { final Transition enterTransition, final ArrayList<View> enteringViews, final Transition exitTransition, final ArrayList<View> exitingViews) { sceneRoot.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(sceneRoot, () -> { if (enterTransition != null) { enterTransition.removeTarget(nonExistentView); ArrayList<View> views = configureEnteringExitingViews( Loading @@ -384,9 +373,6 @@ class FragmentTransition { exitingViews.clear(); exitingViews.add(nonExistentView); } return true; } }); } Loading Loading @@ -541,18 +527,12 @@ class FragmentTransition { epicenterView = null; } sceneRoot.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(sceneRoot, () -> { callSharedElementStartEnd(inFragment, outFragment, inIsPop, inSharedElements, false); if (epicenterView != null) { epicenterView.getBoundsOnScreen(epicenter); } return true; } }); return sharedElementTransition; } Loading Loading @@ -643,11 +623,7 @@ class FragmentTransition { TransitionSet finalSharedElementTransition = sharedElementTransition; sceneRoot.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this); OneShotPreDrawListener.add(sceneRoot, () -> { ArrayMap<String, View> inSharedElements = captureInSharedElements( nameOverrides, finalSharedElementTransition, fragments); Loading @@ -670,8 +646,6 @@ class FragmentTransition { inEpicenterView.getBoundsOnScreen(inEpicenter); } } return true; } }); return sharedElementTransition; } Loading