1*90c8c64dSAndroid Build Coastguard Worker /*
2*90c8c64dSAndroid Build Coastguard Worker  * Copyright (C) 2013 The Android Open Source Project
3*90c8c64dSAndroid Build Coastguard Worker  *
4*90c8c64dSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*90c8c64dSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*90c8c64dSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*90c8c64dSAndroid Build Coastguard Worker  *
8*90c8c64dSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*90c8c64dSAndroid Build Coastguard Worker  *
10*90c8c64dSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*90c8c64dSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*90c8c64dSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*90c8c64dSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*90c8c64dSAndroid Build Coastguard Worker  * limitations under the License.
15*90c8c64dSAndroid Build Coastguard Worker  */
16*90c8c64dSAndroid Build Coastguard Worker 
17*90c8c64dSAndroid Build Coastguard Worker package com.example.android.basictransition;
18*90c8c64dSAndroid Build Coastguard Worker 
19*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle;
20*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.Fragment;
21*90c8c64dSAndroid Build Coastguard Worker import android.transition.Scene;
22*90c8c64dSAndroid Build Coastguard Worker import android.transition.TransitionInflater;
23*90c8c64dSAndroid Build Coastguard Worker import android.transition.TransitionManager;
24*90c8c64dSAndroid Build Coastguard Worker import android.view.LayoutInflater;
25*90c8c64dSAndroid Build Coastguard Worker import android.view.View;
26*90c8c64dSAndroid Build Coastguard Worker import android.view.ViewGroup;
27*90c8c64dSAndroid Build Coastguard Worker import android.widget.RadioGroup;
28*90c8c64dSAndroid Build Coastguard Worker 
29*90c8c64dSAndroid Build Coastguard Worker public class BasicTransitionFragment extends Fragment
30*90c8c64dSAndroid Build Coastguard Worker         implements RadioGroup.OnCheckedChangeListener {
31*90c8c64dSAndroid Build Coastguard Worker 
32*90c8c64dSAndroid Build Coastguard Worker     // We transition between these Scenes
33*90c8c64dSAndroid Build Coastguard Worker     private Scene mScene1;
34*90c8c64dSAndroid Build Coastguard Worker     private Scene mScene2;
35*90c8c64dSAndroid Build Coastguard Worker     private Scene mScene3;
36*90c8c64dSAndroid Build Coastguard Worker 
37*90c8c64dSAndroid Build Coastguard Worker     /** A custom TransitionManager */
38*90c8c64dSAndroid Build Coastguard Worker     private TransitionManager mTransitionManagerForScene3;
39*90c8c64dSAndroid Build Coastguard Worker 
40*90c8c64dSAndroid Build Coastguard Worker     /** Transitions take place in this ViewGroup. We retain this for the dynamic transition on scene 4. */
41*90c8c64dSAndroid Build Coastguard Worker     private ViewGroup mSceneRoot;
42*90c8c64dSAndroid Build Coastguard Worker 
newInstance()43*90c8c64dSAndroid Build Coastguard Worker     public static BasicTransitionFragment newInstance() {
44*90c8c64dSAndroid Build Coastguard Worker         return new BasicTransitionFragment();
45*90c8c64dSAndroid Build Coastguard Worker     }
46*90c8c64dSAndroid Build Coastguard Worker 
BasicTransitionFragment()47*90c8c64dSAndroid Build Coastguard Worker     public BasicTransitionFragment() {
48*90c8c64dSAndroid Build Coastguard Worker     }
49*90c8c64dSAndroid Build Coastguard Worker 
50*90c8c64dSAndroid Build Coastguard Worker     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)51*90c8c64dSAndroid Build Coastguard Worker     public View onCreateView(LayoutInflater inflater, ViewGroup container,
52*90c8c64dSAndroid Build Coastguard Worker                              Bundle savedInstanceState) {
53*90c8c64dSAndroid Build Coastguard Worker         View view = inflater.inflate(R.layout.fragment_basic_transition, container, false);
54*90c8c64dSAndroid Build Coastguard Worker         assert view != null;
55*90c8c64dSAndroid Build Coastguard Worker         RadioGroup radioGroup = (RadioGroup) view.findViewById(R.id.select_scene);
56*90c8c64dSAndroid Build Coastguard Worker         radioGroup.setOnCheckedChangeListener(this);
57*90c8c64dSAndroid Build Coastguard Worker         mSceneRoot = (ViewGroup) view.findViewById(R.id.scene_root);
58*90c8c64dSAndroid Build Coastguard Worker 
59*90c8c64dSAndroid Build Coastguard Worker         // BEGIN_INCLUDE(instantiation_from_view)
60*90c8c64dSAndroid Build Coastguard Worker         // A Scene can be instantiated from a live view hierarchy.
61*90c8c64dSAndroid Build Coastguard Worker         mScene1 = new Scene(mSceneRoot, (ViewGroup) mSceneRoot.findViewById(R.id.container));
62*90c8c64dSAndroid Build Coastguard Worker         // END_INCLUDE(instantiation_from_view)
63*90c8c64dSAndroid Build Coastguard Worker 
64*90c8c64dSAndroid Build Coastguard Worker         // BEGIN_INCLUDE(instantiation_from_resource)
65*90c8c64dSAndroid Build Coastguard Worker         // You can also inflate a generate a Scene from a layout resource file.
66*90c8c64dSAndroid Build Coastguard Worker         mScene2 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene2, getActivity());
67*90c8c64dSAndroid Build Coastguard Worker         // END_INCLUDE(instantiation_from_resource)
68*90c8c64dSAndroid Build Coastguard Worker 
69*90c8c64dSAndroid Build Coastguard Worker         // Another scene from a layout resource file.
70*90c8c64dSAndroid Build Coastguard Worker         mScene3 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene3, getActivity());
71*90c8c64dSAndroid Build Coastguard Worker 
72*90c8c64dSAndroid Build Coastguard Worker         // BEGIN_INCLUDE(custom_transition_manager)
73*90c8c64dSAndroid Build Coastguard Worker         // We create a custom TransitionManager for Scene 3, in which ChangeBounds and Fade
74*90c8c64dSAndroid Build Coastguard Worker         // take place at the same time.
75*90c8c64dSAndroid Build Coastguard Worker         mTransitionManagerForScene3 = TransitionInflater.from(getActivity())
76*90c8c64dSAndroid Build Coastguard Worker                 .inflateTransitionManager(R.transition.scene3_transition_manager, mSceneRoot);
77*90c8c64dSAndroid Build Coastguard Worker         // END_INCLUDE(custom_transition_manager)
78*90c8c64dSAndroid Build Coastguard Worker 
79*90c8c64dSAndroid Build Coastguard Worker         return view;
80*90c8c64dSAndroid Build Coastguard Worker     }
81*90c8c64dSAndroid Build Coastguard Worker 
82*90c8c64dSAndroid Build Coastguard Worker     @Override
onCheckedChanged(RadioGroup group, int checkedId)83*90c8c64dSAndroid Build Coastguard Worker     public void onCheckedChanged(RadioGroup group, int checkedId) {
84*90c8c64dSAndroid Build Coastguard Worker         switch (checkedId) {
85*90c8c64dSAndroid Build Coastguard Worker             case R.id.select_scene_1: {
86*90c8c64dSAndroid Build Coastguard Worker                 // BEGIN_INCLUDE(transition_simple)
87*90c8c64dSAndroid Build Coastguard Worker                 // You can start an automatic transition with TransitionManager.go().
88*90c8c64dSAndroid Build Coastguard Worker                 TransitionManager.go(mScene1);
89*90c8c64dSAndroid Build Coastguard Worker                 // END_INCLUDE(transition_simple)
90*90c8c64dSAndroid Build Coastguard Worker                 break;
91*90c8c64dSAndroid Build Coastguard Worker             }
92*90c8c64dSAndroid Build Coastguard Worker             case R.id.select_scene_2: {
93*90c8c64dSAndroid Build Coastguard Worker                 TransitionManager.go(mScene2);
94*90c8c64dSAndroid Build Coastguard Worker                 break;
95*90c8c64dSAndroid Build Coastguard Worker             }
96*90c8c64dSAndroid Build Coastguard Worker             case R.id.select_scene_3: {
97*90c8c64dSAndroid Build Coastguard Worker                 // BEGIN_INCLUDE(transition_custom)
98*90c8c64dSAndroid Build Coastguard Worker                 // You can also start a transition with a custom TransitionManager.
99*90c8c64dSAndroid Build Coastguard Worker                 mTransitionManagerForScene3.transitionTo(mScene3);
100*90c8c64dSAndroid Build Coastguard Worker                 // END_INCLUDE(transition_custom)
101*90c8c64dSAndroid Build Coastguard Worker                 break;
102*90c8c64dSAndroid Build Coastguard Worker             }
103*90c8c64dSAndroid Build Coastguard Worker             case R.id.select_scene_4: {
104*90c8c64dSAndroid Build Coastguard Worker                 // BEGIN_INCLUDE(transition_dynamic)
105*90c8c64dSAndroid Build Coastguard Worker                 // Alternatively, transition can be invoked dynamically without a Scene.
106*90c8c64dSAndroid Build Coastguard Worker                 // For this, we first call TransitionManager.beginDelayedTransition().
107*90c8c64dSAndroid Build Coastguard Worker                 TransitionManager.beginDelayedTransition(mSceneRoot);
108*90c8c64dSAndroid Build Coastguard Worker                 // Then, we can just change view properties as usual.
109*90c8c64dSAndroid Build Coastguard Worker                 View square = mSceneRoot.findViewById(R.id.transition_square);
110*90c8c64dSAndroid Build Coastguard Worker                 ViewGroup.LayoutParams params = square.getLayoutParams();
111*90c8c64dSAndroid Build Coastguard Worker                 int newSize = getResources().getDimensionPixelSize(R.dimen.square_size_expanded);
112*90c8c64dSAndroid Build Coastguard Worker                 params.width = newSize;
113*90c8c64dSAndroid Build Coastguard Worker                 params.height = newSize;
114*90c8c64dSAndroid Build Coastguard Worker                 square.setLayoutParams(params);
115*90c8c64dSAndroid Build Coastguard Worker                 // END_INCLUDE(transition_dynamic)
116*90c8c64dSAndroid Build Coastguard Worker                 break;
117*90c8c64dSAndroid Build Coastguard Worker             }
118*90c8c64dSAndroid Build Coastguard Worker         }
119*90c8c64dSAndroid Build Coastguard Worker     }
120*90c8c64dSAndroid Build Coastguard Worker 
121*90c8c64dSAndroid Build Coastguard Worker }
122