155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout/* 255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * Copyright (C) 2014 The Android Open Source Project 355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * 455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * in compliance with the License. You may obtain a copy of the License at 655c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * 755c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * http://www.apache.org/licenses/LICENSE-2.0 855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * 955c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * Unless required by applicable law or agreed to in writing, software distributed under the License 1055c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 1155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * or implied. See the License for the specific language governing permissions and limitations under 1255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * the License. 1355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout */ 1495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gupackage android.support.v17.leanback.transition; 1555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout 163c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.animation.Animator; 176f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stoutimport android.animation.TimeInterpolator; 1855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.content.Context; 199240e796bc63422c28f2707840bd99c48573279bDake Guimport android.transition.AutoTransition; 203c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.transition.ChangeBounds; 213c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.transition.Fade; 2255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.transition.Scene; 2355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.transition.Transition; 24c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Guimport android.transition.TransitionInflater; 2555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.transition.TransitionManager; 263c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.transition.TransitionSet; 273c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.transition.TransitionValues; 283c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.util.SparseBooleanArray; 293c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.util.SparseIntArray; 309240e796bc63422c28f2707840bd99c48573279bDake Guimport android.view.View; 3155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.view.ViewGroup; 3255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout 333c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport java.util.ArrayList; 343c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport java.util.HashMap; 353c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 3695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gufinal class TransitionHelperKitkat { 373c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 38e34cae48707e70442aca13e1b4ab55757292828dDake Gu TransitionHelperKitkat() { 3955c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout } 4055c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout 41116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static Object createScene(ViewGroup sceneRoot, Runnable enterAction) { 4255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout Scene scene = new Scene(sceneRoot); 439240e796bc63422c28f2707840bd99c48573279bDake Gu scene.setEnterAction(enterAction); 449240e796bc63422c28f2707840bd99c48573279bDake Gu return scene; 4555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout } 4655c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout 47116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static Object createTransitionSet(boolean sequential) { 483c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu TransitionSet set = new TransitionSet(); 493c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu set.setOrdering(sequential ? TransitionSet.ORDERING_SEQUENTIAL : 503c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu TransitionSet.ORDERING_TOGETHER); 513c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu return set; 523c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 533c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 54116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void addTransition(Object transitionSet, Object transition) { 553c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu ((TransitionSet) transitionSet).addTransition((Transition) transition); 563c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 573c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 58116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static Object createAutoTransition() { 599240e796bc63422c28f2707840bd99c48573279bDake Gu return new AutoTransition(); 609240e796bc63422c28f2707840bd99c48573279bDake Gu } 619240e796bc63422c28f2707840bd99c48573279bDake Gu 624735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu static Object createSlide(int slideEdge) { 634735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu SlideKitkat slide = new SlideKitkat(); 644735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu slide.setSlideEdge(slideEdge); 652f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu return slide; 662f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu } 672f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu 68116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static Object createScale() { 690fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout Scale scale = new Scale(); 700fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout return scale; 710fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout } 720fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout 73116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static Object createFadeTransition(int fadingMode) { 743c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu Fade fade = new Fade(fadingMode); 753c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu return fade; 763c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 773c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 783c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu /** 793c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu * change bounds that support customized start delay. 803c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu */ 8195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu static class CustomChangeBounds extends ChangeBounds { 823c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 833c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu int mDefaultStartDelay; 843c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu // View -> delay 853c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu final HashMap<View, Integer> mViewStartDelays = new HashMap<View, Integer>(); 863c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu // id -> delay 873c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu final SparseIntArray mIdStartDelays = new SparseIntArray(); 883c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu // Class.getName() -> delay 893c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu final HashMap<String, Integer> mClassStartDelays = new HashMap<String, Integer>(); 903c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 913c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu private int getDelay(View view) { 923c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu Integer delay = mViewStartDelays.get(view); 933c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu if (delay != null) { 943c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu return delay; 953c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 963c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu int idStartDelay = mIdStartDelays.get(view.getId(), -1); 973c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu if (idStartDelay != -1) { 983c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu return idStartDelay; 993c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1003c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu delay = mClassStartDelays.get(view.getClass().getName()); 1013c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu if (delay != null) { 1023c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu return delay; 1033c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1043c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu return mDefaultStartDelay; 1053c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1063c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 1073c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu @Override 1083c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues, 1093c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu TransitionValues endValues) { 1103c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu Animator animator = super.createAnimator(sceneRoot, startValues, endValues); 1113c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu if (animator != null && endValues != null && endValues.view != null) { 1123c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu animator.setStartDelay(getDelay(endValues.view)); 1133c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1143c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu return animator; 1153c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1163c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 1173c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu public void setStartDelay(View view, int startDelay) { 1183c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu mViewStartDelays.put(view, startDelay); 1193c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1203c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 1213c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu public void setStartDelay(int viewId, int startDelay) { 1223c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu mIdStartDelays.put(viewId, startDelay); 1233c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1243c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 1253c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu public void setStartDelay(String className, int startDelay) { 1263c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu mClassStartDelays.put(className, startDelay); 1273c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1283c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 1293c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu public void setDefaultStartDelay(int startDelay) { 1303c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu mDefaultStartDelay = startDelay; 1313c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1323c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1333c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 134116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static Object createChangeBounds(boolean reparent) { 1353c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu CustomChangeBounds changeBounds = new CustomChangeBounds(); 1363c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu changeBounds.setReparent(reparent); 1373c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu return changeBounds; 1383c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1393c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 140116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void setChangeBoundsStartDelay(Object changeBounds, int viewId, int startDelay) { 1413c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu ((CustomChangeBounds) changeBounds).setStartDelay(viewId, startDelay); 1423c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1433c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 144116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void setChangeBoundsStartDelay(Object changeBounds, View view, int startDelay) { 1453c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu ((CustomChangeBounds) changeBounds).setStartDelay(view, startDelay); 1463c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1473c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 148116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void setChangeBoundsStartDelay(Object changeBounds, String className, int startDelay) { 1493c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu ((CustomChangeBounds) changeBounds).setStartDelay(className, startDelay); 1503c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1513c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 152116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void setChangeBoundsDefaultStartDelay(Object changeBounds, int startDelay) { 1533c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu ((CustomChangeBounds) changeBounds).setDefaultStartDelay(startDelay); 1543c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1553c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 156116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void setStartDelay(Object transition, long startDelay) { 1572f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu ((Transition)transition).setStartDelay(startDelay); 1582f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu } 1592f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu 160116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void setDuration(Object transition, long duration) { 1612f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu ((Transition)transition).setDuration(duration); 1622f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu } 1632f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu 164116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void exclude(Object transition, int targetId, boolean exclude) { 1653c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu ((Transition) transition).excludeTarget(targetId, exclude); 1663c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1673c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 168116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void exclude(Object transition, View targetView, boolean exclude) { 1693c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu ((Transition) transition).excludeTarget(targetView, exclude); 1703c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1713c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 172116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void excludeChildren(Object transition, int targetId, boolean exclude) { 1739240e796bc63422c28f2707840bd99c48573279bDake Gu ((Transition) transition).excludeChildren(targetId, exclude); 1749240e796bc63422c28f2707840bd99c48573279bDake Gu } 1759240e796bc63422c28f2707840bd99c48573279bDake Gu 176116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void excludeChildren(Object transition, View targetView, boolean exclude) { 1779240e796bc63422c28f2707840bd99c48573279bDake Gu ((Transition) transition).excludeChildren(targetView, exclude); 1789240e796bc63422c28f2707840bd99c48573279bDake Gu } 1799240e796bc63422c28f2707840bd99c48573279bDake Gu 180116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void include(Object transition, int targetId) { 1813c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu ((Transition) transition).addTarget(targetId); 1823c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1833c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 184116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void include(Object transition, View targetView) { 1853c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu ((Transition) transition).addTarget(targetView); 1863c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu } 1873c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 188116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void setTransitionListener(Object transition, final TransitionListener listener) { 1899240e796bc63422c28f2707840bd99c48573279bDake Gu Transition t = (Transition) transition; 1909240e796bc63422c28f2707840bd99c48573279bDake Gu t.addListener(new Transition.TransitionListener() { 1919240e796bc63422c28f2707840bd99c48573279bDake Gu 1929240e796bc63422c28f2707840bd99c48573279bDake Gu @Override 1939240e796bc63422c28f2707840bd99c48573279bDake Gu public void onTransitionStart(Transition transition) { 1942f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu listener.onTransitionStart(transition); 1959240e796bc63422c28f2707840bd99c48573279bDake Gu } 1969240e796bc63422c28f2707840bd99c48573279bDake Gu 1979240e796bc63422c28f2707840bd99c48573279bDake Gu @Override 1989240e796bc63422c28f2707840bd99c48573279bDake Gu public void onTransitionResume(Transition transition) { 1999240e796bc63422c28f2707840bd99c48573279bDake Gu } 2009240e796bc63422c28f2707840bd99c48573279bDake Gu 2019240e796bc63422c28f2707840bd99c48573279bDake Gu @Override 2029240e796bc63422c28f2707840bd99c48573279bDake Gu public void onTransitionPause(Transition transition) { 2039240e796bc63422c28f2707840bd99c48573279bDake Gu } 2049240e796bc63422c28f2707840bd99c48573279bDake Gu 2059240e796bc63422c28f2707840bd99c48573279bDake Gu @Override 2069240e796bc63422c28f2707840bd99c48573279bDake Gu public void onTransitionEnd(Transition transition) { 2072f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu listener.onTransitionEnd(transition); 2089240e796bc63422c28f2707840bd99c48573279bDake Gu } 2099240e796bc63422c28f2707840bd99c48573279bDake Gu 2109240e796bc63422c28f2707840bd99c48573279bDake Gu @Override 2119240e796bc63422c28f2707840bd99c48573279bDake Gu public void onTransitionCancel(Transition transition) { 2129240e796bc63422c28f2707840bd99c48573279bDake Gu } 2139240e796bc63422c28f2707840bd99c48573279bDake Gu }); 2149240e796bc63422c28f2707840bd99c48573279bDake Gu } 2159240e796bc63422c28f2707840bd99c48573279bDake Gu 216116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void runTransition(Object scene, Object transition) { 2179240e796bc63422c28f2707840bd99c48573279bDake Gu TransitionManager.go((Scene) scene, (Transition) transition); 21855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout } 2196f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout 220116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void setInterpolator(Object transition, Object timeInterpolator) { 2216f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout ((Transition) transition).setInterpolator((TimeInterpolator) timeInterpolator); 2226f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout } 2230fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout 224116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu static void addTarget(Object transition, View view) { 2250fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout ((Transition) transition).addTarget(view); 2260fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout } 227c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu 228c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu static Object loadTransition(Context context, int resId) { 229c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu return TransitionInflater.from(context).inflateTransition(resId); 230c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu } 23155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout} 232