¿Puedo abrir el diseño del cajón con animación mediante programación?

He creado el cajón de la aplicación mediante 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?

Predire al oyente, también conocido como safeway

Aquí está el ejemplo de escucha predraw. Literalmente comenzará la animación tan pronto como pueda, que tal vez un poco demasiado rápido. Es posible que desee hacer una combinación de esto con un runnable mostrado en segundo lugar. No 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 peligroso

 // 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 entrada del blog para más información http://corner.squareup.com/2013/12/android-main-thread-2.html . La mejor cosa a hacer sería utilizar el oyente predraw o quitar su runnable en onPause.

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

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

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

Desea asegurarse de que sólo establece el indicador cuando savedInstanceState es nulo, lo que indica que la actividad no se reanuda 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 podría utilizar un OnPreDrawListener pero siento que es un poco innecesariamente complicado como onPreDraw se llama varias veces por lo que necesita para 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 en un número arbitrario de milisegundos es una forma peligrosa de resolver este problema. En el peor de los casos, la llamada a abrir el cajón podría ocurrir después de OnDestroy si el usuario se aleja rápidamente.

  • Cajón de navegación Cambia el fondo mientras se desplaza
  • ¿Cómo comprobar si el cajón de navegación está abierto?
  • Icono de hamburguesa no se muestra en el fragmento de cajón de navegación
  • ¿En qué componentes de interfaz de usuario deben utilizarse los filtros y / o la clasificación?
  • Uso del cajón de navegación en Android más antiguo
  • SeekBar en un NavigationDrawer
  • Cambiar el color de fondo del elemento seleccionado en el cajón de navegación
  • Cómo abrir el cajón de navegación en el botón de clic en el fragmento principal?
  • ¿Cómo configurar el color / estilo personalizado de ActionBar?
  • Salir de la aplicación cuando presione el botón Atrás en actividad con múltiples fragmentos en el Gaveta de navegación
  • El cajón de navegación en android no está en pantalla completa
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.