public static void setTargets(@NonNull Transition transition, @NonNull View nonExistentView, @NonNull List<View> sharedViews) { final List<View> views = transition.getTargets(); views.clear(); final int count = sharedViews.size(); for (int i = 0; i < count; i++) { final View view = sharedViews.get(i); bfsAddViewChildren(views, view); } views.add(nonExistentView); sharedViews.add(nonExistentView); addTargets(transition, sharedViews); }
@Override public void run() { ArrayMap<String, View> capturedToSharedElements = captureToSharedElements(to, isPush); if (capturedToSharedElements != null) { toSharedElements.addAll(capturedToSharedElements.values()); toSharedElements.add(nonExistentView); } callSharedElementStartEnd(capturedToSharedElements, false); if (sharedElementTransition != null) { sharedElementTransition.getTargets().clear(); sharedElementTransition.getTargets().addAll(toSharedElements); TransitionUtils.replaceTargets(sharedElementTransition, fromSharedElements, toSharedElements); final View toEpicenterView = getToEpicenterView(capturedToSharedElements); if (toEpicenterView != null && toEpicenter != null) { TransitionUtils.getBoundsOnScreen(toEpicenterView, toEpicenter); } } } });
public static void replaceTargets(@NonNull Transition transition, @NonNull List<View> oldTargets, @Nullable List<View> newTargets) { if (transition instanceof TransitionSet) { TransitionSet set = (TransitionSet) transition; int numTransitions = set.getTransitionCount(); for (int i = 0; i < numTransitions; i++) { Transition child = set.getTransitionAt(i); replaceTargets(child, oldTargets, newTargets); } } else if (!TransitionUtils.hasSimpleTarget(transition)) { List<View> targets = transition.getTargets(); if (targets != null && targets.size() == oldTargets.size() && targets.containsAll(oldTargets)) { final int targetCount = newTargets == null ? 0 : newTargets.size(); for (int i = 0; i < targetCount; i++) { transition.addTarget(newTargets.get(i)); } for (int i = oldTargets.size() - 1; i >= 0; i--) { transition.removeTarget(oldTargets.get(i)); } } } }
public static void addTargets(@Nullable Transition transition, @NonNull List<View> views) { if (transition == null) { return; } if (transition instanceof TransitionSet) { TransitionSet set = (TransitionSet) transition; int numTransitions = set.getTransitionCount(); for (int i = 0; i < numTransitions; i++) { Transition child = set.getTransitionAt(i); addTargets(child, views); } } else if (!hasSimpleTarget(transition)) { List<View> targets = transition.getTargets(); if (isNullOrEmpty(targets)) { int numViews = views.size(); for (int i = 0; i < numViews; i++) { transition.addTarget(views.get(i)); } } } }