1c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki/* 2c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * Copyright (C) 2016 The Android Open Source Project 3c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * 4c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License"); 5c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * you may not use this file except in compliance with the License. 6c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * You may obtain a copy of the License at 7c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * 8c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * http://www.apache.org/licenses/LICENSE-2.0 9c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * 10c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * Unless required by applicable law or agreed to in writing, software 11c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS, 12c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * See the License for the specific language governing permissions and 14c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * limitations under the License. 15c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki */ 16c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki 17c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Arakipackage android.support.transition; 18c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki 19c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Arakiimport android.animation.Animator; 20c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Arakiimport android.os.Build; 21cbba0a52f7d7b593dbb13a138515f066f75cce80Yuichi Arakiimport android.support.annotation.NonNull; 22cbba0a52f7d7b593dbb13a138515f066f75cce80Yuichi Arakiimport android.support.annotation.Nullable; 23c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Arakiimport android.view.ViewGroup; 24c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki 25c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki/** 26c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * This transition captures the layout bounds of target views before and after 27c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * the scene change and animates those changes during the transition. 28c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * 29c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki * <p>Unlike the platform version, this does not support use in XML resources.</p> 30c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki */ 31c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Arakipublic class ChangeBounds extends Transition { 32c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki 33c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki public ChangeBounds() { 34c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki super(true); 35c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki if (Build.VERSION.SDK_INT < 19) { 36c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki mImpl = new ChangeBoundsIcs(this); 37c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki } else { 38c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki mImpl = new ChangeBoundsKitKat(this); 39c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki } 40c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki } 41c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki 42c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki @Override 43cbba0a52f7d7b593dbb13a138515f066f75cce80Yuichi Araki public void captureEndValues(@NonNull TransitionValues transitionValues) { 44c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki mImpl.captureEndValues(transitionValues); 45c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki } 46c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki 47c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki @Override 48cbba0a52f7d7b593dbb13a138515f066f75cce80Yuichi Araki public void captureStartValues(@NonNull TransitionValues transitionValues) { 49c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki mImpl.captureStartValues(transitionValues); 50c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki } 51c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki 52c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki @Override 53cbba0a52f7d7b593dbb13a138515f066f75cce80Yuichi Araki @Nullable 54cbba0a52f7d7b593dbb13a138515f066f75cce80Yuichi Araki public Animator createAnimator(@NonNull ViewGroup sceneRoot, 55cbba0a52f7d7b593dbb13a138515f066f75cce80Yuichi Araki @NonNull TransitionValues startValues, @NonNull TransitionValues endValues) { 56c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki return mImpl.createAnimator(sceneRoot, startValues, endValues); 57c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki } 58c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki 59733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki /** 60733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * When <code>resizeClip</code> is true, ChangeBounds resizes the view using the clipBounds 61733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * instead of changing the dimensions of the view during the animation. When 62733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * <code>resizeClip</code> is false, ChangeBounds resizes the View by changing its dimensions. 63733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * 64733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * <p>When resizeClip is set to true, the clip bounds is modified by ChangeBounds. Therefore, 65733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * {@link android.transition.ChangeClipBounds} is not compatible with ChangeBounds 66733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * in this mode.</p> 67733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * 68733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @param resizeClip Used to indicate whether the view bounds should be modified or the 69733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * clip bounds should be modified by ChangeBounds. 70733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki * @see android.view.View#setClipBounds(android.graphics.Rect) 71733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki */ 72733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki public void setResizeClip(boolean resizeClip) { 73733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki ((ChangeBoundsInterface) mImpl).setResizeClip(resizeClip); 74733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki } 75733b5aaadf1b1f5dc3038876dbfbabb79f649b03Yuichi Araki 76c876cd8f9334e2423de00836009f3fd7a9566938Yuichi Araki} 77