1faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/* 2faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Copyright (C) 2013 The Android Open Source Project 3faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 4faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 5faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * you may not use this file except in compliance with the License. 6faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * You may obtain a copy of the License at 7faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 8faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * http://www.apache.org/licenses/LICENSE-2.0 9faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 10faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Unless required by applicable law or agreed to in writing, software 11faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * distributed under the License is distributed on an "AS IS" BASIS, 12faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * See the License for the specific language governing permissions and 14faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * limitations under the License. 15faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 166ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase 17d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haasepackage android.transition; 18faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 19faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.animation.Animator; 20faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.animation.ObjectAnimator; 21faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.animation.TimeInterpolator; 22faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.View; 23faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.ViewGroup; 24faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.animation.AccelerateInterpolator; 25faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.animation.DecelerateInterpolator; 26faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 27faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/** 28faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * This transition captures the visibility of target objects before and 29faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * after a scene change and animates any changes by sliding the target 30faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * objects into or out of place. 31d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * 32d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @hide 33faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 34faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haasepublic class Slide extends Visibility { 35faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 36faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase // TODO: Add parameter for sliding factor - it's hard-coded below 37faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 38faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase private static final TimeInterpolator sAccelerator = new AccelerateInterpolator(); 39faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase private static final TimeInterpolator sDecelerator = new DecelerateInterpolator(); 40faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 41faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 42d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public Animator onAppear(ViewGroup sceneRoot, 436ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase TransitionValues startValues, int startVisibility, 446ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase TransitionValues endValues, int endVisibility) { 456ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase View endView = (endValues != null) ? endValues.view : null; 462ea7f8b9c5f903050d42c1af57406bf528979f45Chet Haase endView.setTranslationY(-2 * endView.getHeight()); 47faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ObjectAnimator anim = ObjectAnimator.ofFloat(endView, View.TRANSLATION_Y, 48faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase -2 * endView.getHeight(), 0); 49faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase anim.setInterpolator(sDecelerator); 50faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase return anim; 51faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 52faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 53faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 54d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public Animator onDisappear(ViewGroup sceneRoot, 556ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase TransitionValues startValues, int startVisibility, 566ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase TransitionValues endValues, int endVisibility) { 576ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase View startView = (startValues != null) ? startValues.view : null; 582ea7f8b9c5f903050d42c1af57406bf528979f45Chet Haase startView.setTranslationY(0); 59faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ObjectAnimator anim = ObjectAnimator.ofFloat(startView, View.TRANSLATION_Y, 0, 60faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase -2 * startView.getHeight()); 61faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase anim.setInterpolator(sAccelerator); 62faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase return anim; 63faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 64faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 65faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase} 66