package com.linfaxin.transitionplayer.demo; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarActivity; import android.transitions.everywhere.Scene; import android.transitions.everywhere.TransitionManager; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import com.linfaxin.transitionplayer.TransitionPlayer; import java.util.Random; /** * Created by linfaxin on 2015/8/1. * Email: linlinfaxin@163.com */ public class MaterialMenuDemo extends ActionBarActivity { DrawerLayout drawerLayout; ViewGroup mSceneRoot; TransitionPlayer transitionPlayer = new TransitionPlayer(); int[] layouts = new int[]{R.layout.material_menu_option, R.layout.material_menu_back, R.layout.material_menu_x, R.layout.material_menu_y}; int currentLayoutIndex = 0; boolean willOpen = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.demo_material_menu); drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); mSceneRoot = (ViewGroup) findViewById(R.id.sceneRootView); drawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() { @Override public void onDrawerSlide(View drawerView, float slideOffset) { super.onDrawerSlide(drawerView, slideOffset); transitionPlayer.setCurrentFraction(willOpen ? slideOffset : 1-slideOffset); } @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); preTransition(); willOpen = true; } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); preTransition(); willOpen = false; } }); preTransition(); } private void preTransition(){ Random r = new Random(); mSceneRoot.removeAllViews(); int toIndex = r.nextInt(layouts.length); while (toIndex == currentLayoutIndex){ toIndex = r.nextInt(layouts.length); } //lock current layout View.inflate(this, layouts[currentLayoutIndex], mSceneRoot); //pre next layout final Scene scene = Scene.getSceneForLayout(mSceneRoot, layouts[toIndex], MaterialMenuDemo.this); mSceneRoot.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { mSceneRoot.getViewTreeObserver().removeOnPreDrawListener(this); TransitionManager.go(scene, transitionPlayer); return false; } }); currentLayoutIndex = toIndex; } }