studio multiple con activities android android-support-library navigation-drawer

android - multiple - ¿Puedo abrir el diseño del cajón con animación programáticamente?



navigation drawer material design (3)

Creé el cajón de aplicaciones utilizando la siguiente biblioteca: http://developer.android.com/training/implementing-navigation/nav-drawer.html

Quiero mostrar el cajón de navegación con animación al abrir la aplicación. ¿Cómo puedo hacer eso?


Puede llamar a openDrawer(int gravity) en DrawerLayout para que abra el cajón con una animación.


drawerLayout.openDrawer(Gravity.LEFT) llamar a drawerLayout.openDrawer(Gravity.LEFT) para animar la apertura del cajón. El cajón no se animará si realiza la llamada demasiado pronto en el ciclo de vida de la actividad.

La solución más sencilla es simplemente establecer una marca en onCreate () y actuar sobre ella en onResume ().

Desea asegurarse de que solo establece el indicador cuando savedInstanceState es nulo, lo que indica que la Actividad no se está reanudando desde el fondo. No desea que el cajón se deslice cada vez que cambie de orientación o cambie de aplicación.

public class MainActivity extends ActionBarActivity { private DrawerLayout drawerLayout; private boolean firstResume = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); drawerLayout = (DrawerLayout)findViewById(R.id.drawer); if(savedInstanceState == null){ firstResume = true; } } @Override protected void onResume() { super.onResume(); if(firstResume) { drawerLayout.openDrawer(Gravity.LEFT); } firstResume = false; } }

También puede usar un OnPreDrawListener, pero creo que es un poco innecesario, ya que se llama a OnPreDraw varias veces, por lo que debe eliminar el oyente después de abrir el cajón. También está asumiendo que preDraw es un momento adecuado para activar el cajón, que es una implementación interna del diseño del cajón. Una implementación futura podría no animarse correctamente hasta después de onDraw, por ejemplo.

Retrasar la apertura del cajón por un número arbitrario de milisegundos es una forma peligrosa de resolver este problema. En el peor de los casos, la llamada para abrir el cajón podría ocurrir después de onDestroy si el usuario se aleja rápidamente.


Predraw listener, también conocido como safeway

Aquí está el ejemplo del oyente predraw. Literalmente comenzará la animación tan pronto como sea posible, lo que quizás sea un poco demasiado rápido. Es posible que desee hacer una combinación de esto con un segundo que se pueda ejecutar. No voy a mostrar los dos combinados, solo separados.

@Override protected void onCreate(Bundle savedInstanceState) { ... // Building NavDrawer logic here. Just a method call would be best. ... ViewTreeObserver vto = drawer.getViewTreeObserver(); if (vto != null) vto.addOnPreDrawListener(new ShouldShowListener(drawer)); } private static class ShouldShowListener implements OnPreDrawListener { private final DrawerLayout drawerLayout; private ShouldShowListener(DrawerLayout drawerLayout) { this.drawerLayout= drawerLayout; } @Override public boolean onPreDraw() { if (view != null) { ViewTreeObserver vto = view.getViewTreeObserver(); if (vto != null) { vto.removeOnPreDrawListener(this); } } drawerLayout.openDrawer(Gravity.LEFT); return true; } }

PostDelay Runnable, también conocido como living dangerous

// Delay is in milliseconds static final int DRAWER_DELAY = 200; @Override protected void onCreate(Bundle savedInstanceState) { ... // Building NavDrawer logic here. Just a method call would be best. ... new Handler().postDelayed(openDrawerRunnable(), DRAWER_DELAY); } private Runnable openDrawerRunnable() { return new Runnable() { @Override public void run() { drawerLayout.openDrawer(Gravity.LEFT); } } }

ADVERTENCIA

Si giran en el inicio de la aplicación por primera vez BOOM! Lea esta publicación del blog para obtener más información http://corner.squareup.com/2013/12/android-main-thread-2.html . Lo mejor que puedes hacer es usar la escucha de predraw o eliminar tu runnable en onPause.