Visibility.java revision 4e5a72756eb66c31baf1a3054c66520f1c3f5b8c
1733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki/* 2733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * Copyright (C) 2016 The Android Open Source Project 3733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * 4733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License"); 5733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * you may not use this file except in compliance with the License. 6733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * You may obtain a copy of the License at 7733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * 8733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * http://www.apache.org/licenses/LICENSE-2.0 9733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * 10733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * Unless required by applicable law or agreed to in writing, software 11733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS, 12733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * See the License for the specific language governing permissions and 14733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * limitations under the License. 15733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki */ 16733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 17733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Arakipackage android.support.transition; 18733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 19733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Arakiimport android.animation.Animator; 20733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Arakiimport android.support.annotation.NonNull; 214e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Arakiimport android.support.annotation.Nullable; 22733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Arakiimport android.view.View; 23733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Arakiimport android.view.ViewGroup; 24733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 25733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki/** 26733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * This transition tracks changes to the visibility of target views in the 27733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * start and end scenes. Visibility is determined not just by the 28733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * {@link View#setVisibility(int)} state of views, but also whether 29733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * views exist in the current view hierarchy. The class is intended to be a 309562a3b639225d406d736b64a12e2d75459259e3Alan Viverette * utility for subclasses such as {@link Fade}, which use this visibility 31733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * information to determine the specific animations to run when visibility 32733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * changes occur. Subclasses should implement one or both of the methods 33733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * {@link #onAppear(ViewGroup, TransitionValues, int, TransitionValues, int)}, 34733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * {@link #onDisappear(ViewGroup, TransitionValues, int, TransitionValues, int)}, 35733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki */ 364e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Arakipublic abstract class Visibility extends Transition { 37733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 384e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki private static final String PROPNAME_VISIBILITY = "android:visibility:visibility"; 394e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki private static final String PROPNAME_PARENT = "android:visibility:parent"; 404e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki 414e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki private static final String[] sTransitionProperties = { 424e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki PROPNAME_VISIBILITY, 434e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki PROPNAME_PARENT, 444e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki }; 454e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki 464e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki private static class VisibilityInfo { 474e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki boolean mVisibilityChange; 484e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki boolean mFadeIn; 494e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki int mStartVisibility; 504e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki int mEndVisibility; 514e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki ViewGroup mStartParent; 524e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki ViewGroup mEndParent; 53733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki } 54733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 554e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki public Visibility() { 56733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki } 57733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 584e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki @Nullable 59733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki @Override 604e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki public String[] getTransitionProperties() { 614e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki return sTransitionProperties; 624e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 634e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki 644e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki private void captureValues(TransitionValues transitionValues) { 654e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki int visibility = transitionValues.view.getVisibility(); 664e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki transitionValues.values.put(PROPNAME_VISIBILITY, visibility); 674e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki transitionValues.values.put(PROPNAME_PARENT, transitionValues.view.getParent()); 68733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki } 69733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 70733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki @Override 71733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki public void captureStartValues(@NonNull TransitionValues transitionValues) { 724e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki captureValues(transitionValues); 734e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 744e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki 754e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki @Override 764e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki public void captureEndValues(@NonNull TransitionValues transitionValues) { 774e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki captureValues(transitionValues); 78733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki } 79733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 80733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki /** 81733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * Returns whether the view is 'visible' according to the given values 82733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * object. This is determined by testing the same properties in the values 83733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * object that are used to determine whether the object is appearing or 84733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * disappearing in the {@link 85733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * Transition#createAnimator(ViewGroup, TransitionValues, TransitionValues)} 86733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * method. This method can be called by, for example, subclasses that want 87733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * to know whether the object is visible in the same way that Visibility 88733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * determines it for the actual animation. 89733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * 90733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @param values The TransitionValues object that holds the information by 91733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * which visibility is determined. 92733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @return True if the view reference by <code>values</code> is visible, 93733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * false otherwise. 94733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki */ 95733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki public boolean isVisible(TransitionValues values) { 964e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (values == null) { 974e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki return false; 984e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 994e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki int visibility = (Integer) values.values.get(PROPNAME_VISIBILITY); 1004e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki View parent = (View) values.values.get(PROPNAME_PARENT); 1014e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki 1024e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki return visibility == View.VISIBLE && parent != null; 1034e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1044e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki 1054e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki private VisibilityInfo getVisibilityChangeInfo(TransitionValues startValues, 1064e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki TransitionValues endValues) { 1074e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki final VisibilityInfo visInfo = new VisibilityInfo(); 1084e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mVisibilityChange = false; 1094e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mFadeIn = false; 1104e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (startValues != null) { 1114e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mStartVisibility = (Integer) startValues.values.get(PROPNAME_VISIBILITY); 1124e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mStartParent = (ViewGroup) startValues.values.get(PROPNAME_PARENT); 1134e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } else { 1144e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mStartVisibility = -1; 1154e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mStartParent = null; 1164e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1174e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (endValues != null) { 1184e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mEndVisibility = (Integer) endValues.values.get(PROPNAME_VISIBILITY); 1194e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mEndParent = (ViewGroup) endValues.values.get(PROPNAME_PARENT); 1204e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } else { 1214e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mEndVisibility = -1; 1224e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mEndParent = null; 1234e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1244e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (startValues != null && endValues != null) { 1254e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (visInfo.mStartVisibility == visInfo.mEndVisibility 1264e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki && visInfo.mStartParent == visInfo.mEndParent) { 1274e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki return visInfo; 1284e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } else { 1294e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (visInfo.mStartVisibility != visInfo.mEndVisibility) { 1304e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (visInfo.mStartVisibility == View.VISIBLE) { 1314e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mFadeIn = false; 1324e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mVisibilityChange = true; 1334e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } else if (visInfo.mEndVisibility == View.VISIBLE) { 1344e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mFadeIn = true; 1354e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mVisibilityChange = true; 1364e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1374e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki // no visibilityChange if going between INVISIBLE and GONE 1384e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } else /* if (visInfo.mStartParent != visInfo.mEndParent) */ { 1394e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (visInfo.mEndParent == null) { 1404e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mFadeIn = false; 1414e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mVisibilityChange = true; 1424e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } else if (visInfo.mStartParent == null) { 1434e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mFadeIn = true; 1444e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mVisibilityChange = true; 1454e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1464e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1474e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1484e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1494e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (startValues == null) { 1504e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mFadeIn = true; 1514e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mVisibilityChange = true; 1524e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } else if (endValues == null) { 1534e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mFadeIn = false; 1544e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki visInfo.mVisibilityChange = true; 1554e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1564e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki return visInfo; 1574e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1584e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki 1594e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki @Nullable 1604e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki @Override 1614e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki public Animator createAnimator(@NonNull ViewGroup sceneRoot, 1624e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki @Nullable TransitionValues startValues, @Nullable TransitionValues endValues) { 1634e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki VisibilityInfo visInfo = getVisibilityChangeInfo(startValues, endValues); 1644e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (visInfo.mVisibilityChange) { 1654e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki // Only transition views that are either targets of this transition 1664e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki // or whose parent hierarchies remain stable between scenes 1674e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki boolean isTarget = false; 1684e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (mTargets.size() > 0 || mTargetIds.size() > 0) { 1694e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki View startView = startValues != null ? startValues.view : null; 1704e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki View endView = endValues != null ? endValues.view : null; 1714e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki int startId = startView != null ? startView.getId() : -1; 1724e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki int endId = endView != null ? endView.getId() : -1; 1734e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki isTarget = isValidTarget(startView, startId) || isValidTarget(endView, endId); 1744e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1754e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (isTarget || ((visInfo.mStartParent != null || visInfo.mEndParent != null))) { 1764e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki if (visInfo.mFadeIn) { 1774e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki return onAppear(sceneRoot, startValues, visInfo.mStartVisibility, 1784e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki endValues, visInfo.mEndVisibility); 1794e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } else { 1804e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki return onDisappear(sceneRoot, startValues, visInfo.mStartVisibility, 1814e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki endValues, visInfo.mEndVisibility 1824e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki ); 1834e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1844e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1854e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki } 1864e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki return null; 187733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki } 188733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 189733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki /** 190733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * The default implementation of this method does nothing. Subclasses 191733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * should override if they need to create an Animator when targets appear. 192733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * The method should only be called by the Visibility class; it is 193733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * not intended to be called from external classes. 194733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * 195733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @param sceneRoot The root of the transition hierarchy 196733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @param startValues The target values in the start scene 197733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @param startVisibility The target visibility in the start scene 198733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @param endValues The target values in the end scene 199733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @param endVisibility The target visibility in the end scene 200733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @return An Animator to be started at the appropriate time in the 201733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * overall transition for this scene change. A null value means no animation 202733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * should be run. 203733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki */ 2044e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki @SuppressWarnings("UnusedParameters") 205733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki public Animator onAppear(ViewGroup sceneRoot, TransitionValues startValues, int startVisibility, 206733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki TransitionValues endValues, int endVisibility) { 2074e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki return null; 208733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki } 209733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 210733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki /** 211733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * The default implementation of this method does nothing. Subclasses 212733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * should override if they need to create an Animator when targets disappear. 213733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * The method should only be called by the Visibility class; it is 214733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * not intended to be called from external classes. 215733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * 216733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @param sceneRoot The root of the transition hierarchy 217733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @param startValues The target values in the start scene 218733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @param startVisibility The target visibility in the start scene 219733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @param endValues The target values in the end scene 220733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @param endVisibility The target visibility in the end scene 221733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @return An Animator to be started at the appropriate time in the 222733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * overall transition for this scene change. A null value means no animation 223733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * should be run. 224733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki */ 2254e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki @SuppressWarnings("UnusedParameters") 226733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki public Animator onDisappear(ViewGroup sceneRoot, TransitionValues startValues, 227733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki int startVisibility, TransitionValues endValues, int endVisibility) { 2284e5a72756eb66c31baf1a3054c66520f1c3f5b8cYuichi Araki return null; 229733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki } 230733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 231733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki // TODO: Implement API 21; onAppear (4 params), onDisappear (4 params), getMode, setMode 232733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki // TODO: Implement API 23; isTransitionRequired 233733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 234733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki} 235