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.view.View;
22faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.ViewGroup;
23faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
24faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/**
25faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * This transition captures the rotation property of targets before and after
26faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * the scene change and animates any changes.
27d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase *
28d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @hide
29faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */
30faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haasepublic class Rotate extends Transition {
31faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
32faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    private static final String PROPNAME_ROTATION = "android:rotate:rotation";
33faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
34faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    @Override
35d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase    public void captureStartValues(TransitionValues transitionValues) {
36d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase        transitionValues.values.put(PROPNAME_ROTATION, transitionValues.view.getRotation());
37d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase    }
38d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase
39d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase    @Override
40d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase    public void captureEndValues(TransitionValues transitionValues) {
41d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase        transitionValues.values.put(PROPNAME_ROTATION, transitionValues.view.getRotation());
42faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    }
43faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
44faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    @Override
45d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
46faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            TransitionValues endValues) {
47faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        if (startValues == null || endValues == null) {
48faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            return null;
49faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
50faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        final View view = endValues.view;
51faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        float startRotation = (Float) startValues.values.get(PROPNAME_ROTATION);
52faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        float endRotation = (Float) endValues.values.get(PROPNAME_ROTATION);
53faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        if (startRotation != endRotation) {
542ea7f8b9c5f903050d42c1af57406bf528979f45Chet Haase            view.setRotation(startRotation);
55faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase            return ObjectAnimator.ofFloat(view, View.ROTATION,
56faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase                    startRotation, endRotation);
57faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        }
58faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        return null;
59faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    }
60faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase}
61