¿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?
- Android Api 23 Cambiar Navegación Ver headerLayout textview
- Android lollipop toolbar conmutador entre abrir / cerrar el cajón y el botón Atrás
- Uso de fragmentos del cajón de navegación para superponer la actividad
- Navegación Cajón de contenedores múltiples y mejores prácticas
- Añadir 2 listview en el cajón de navegación, sólo uno funciona
- Cómo agregar un elemento de menú plegable dentro del cajón de navegación en android?
- Cajón de navegación - ¿qué hace syncState () y por qué debe llamarse dentro onPostCreate ()?
- Reemplazar el diseño de la barra de herramientas de acuerdo con el fragmento visualizado
- ¿Cómo personalizar los elementos de menú en NavigationView como GMail App
- Establecer el icono de NavigationDrawer en el lado derecho mediante el widget de la barra de herramientas de AppCompat-V-21
- ANDROID: Habilitar y deshabilitar MenuItem en el esquema de la actividad del cajón de navegación
- ¿Cómo puedo cambiar el tamaño de texto del elemento NavigationView?
- ExpandableListView y el NavigationDrawer
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.
- Descarga de Manual de la Biblioteca de Soporte para Android
- Mostrando progreso indeterminado en Sherlock Action Bar