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