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