¿Cómo eliminar el retraso al abrir una actividad con un DrawerLayout?
Tengo una actividad con un DrawerLayout pero cada vez que se abre hay un retraso como una fracción de segundo donde la pantalla es blanca, entonces mi pantalla se dibuja.
Esto sucede una vez finalizada la Transición. Así que parece que la transición de animación de pantalla es saltar.
- Cómo personalizar la barra de acciones contextuales utilizando appCompat en el diseño de materiales
- Chips componente en la biblioteca de soporte de Android?
- La biblioteca appcompat importada tiene errores
- Asistente de configuración materializado como nativo en Lollipop
- Cómo implementar hojas inferiores persistentes de Documentos de diseño de materiales
Traté de poner esto en mi OnCreate después de vincular las vistas con ButterKnife pero no hizo nada.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { postponeEnterTransition(); drawerLayout.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @TargetApi(Build.VERSION_CODES.LOLLIPOP) public boolean onPreDraw() { drawerLayout.getViewTreeObserver().removeOnPreDrawListener(this); startPostponedEnterTransition(); return true; } }); }
Sí lo estoy optimizando para Lollipop, y para los dispositivos pre-Lollipop estoy usando jsut overridePendingTransitions
y funciona bien. Mi problema es sólo en los dispositivos Lollipop.
Btw, mis transiciones de entrada y salida son fade_in_out
definido en xml y especificado en styles
<style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="colorAccent">@color/pink</item> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:windowActivityTransitions">true</item> <item name="android:windowContentTransitions">true</item> <!-- specify enter and exit transitions --> <!-- options are: explode, slide, fade --> <item name="android:windowEnterTransition">@transition/fade_in_out_transition</item> <item name="android:windowExitTransition">@transition/fade_in_out_transition</item> <!-- specify shared element transitions --> <item name="android:windowSharedElementEnterTransition">@transition/change_clip_bounds</item> <item name="android:windowSharedElementExitTransition">@transition/change_clip_bounds</item> <item name="android:windowSoftInputMode">stateAlwaysHidden|adjustResize</item> </style>
- Android RecyclerView con CardView - mostrar tarjetas en una pila-como (no una lista)
- Fijas fijas en nuevo diseño de material android
- ¿Es válida la guía de diseño de iconografía Android para Android 5 / Diseño de material
- Android Theme.AppCompat.Light con Dark Toolbar (para texto claro)
- Por qué el diseño de material de Google dice: "El material nunca se dobla ni se pliega".
- Cómo configurar una pestaña específica al abrir una actividad de Layout de pestaña deslizante?
- Diseño de material Android replicar barra de herramientas ejemplo de migas de pan
- CollapsingToolbarLayout no funciona bien con NestedScrollView
Finalmente encontré una solución a esto. No sé por qué o cómo funcionó, pero sólo sé que eliminó el retraso en las animaciones. He añadido un controlador en el OnCreate
de la actividad que se ejecutan las demás instrucciones para la creación, es decir, añadir el fragmento inicial en la vista, después de 300 ms
Handler mHandler = new Handler(); mHandler.postDelayed(new Runnable() { @Override public void run() { switchFragment(); } }, 300);
Tal vez es porque Lollipop tiene layoutTransition por defecto en los elementos de la interfaz de usuario, ¿ha intentado?
drawerLayout.setLayoutTransition(null)
Cambiaría su transición de salida:
item name="android:windowExitTransition">@transition/fade_in_out_transition</item> item
A la ventana de devolución:
name="android:windowReturnTransition">@transition/fade_in_out_transition</item>
- Cuando se utiliza la ventana de salida, la visibilidad de la ventana se cambia a invisible brevemente antes de su próxima transición comienza.
Establece la transición que se utilizará para mover las vistas fuera de la escena cuando el fragmento se quita, se oculta o se separa cuando no se abre la pila trasera. Las Vistas salientes serán aquellas que sean vistas regulares o ViewGroups que tengan isTransitionGroup () devuelto true. Las Transiciones Típicas extenderán Visibilidad ya que la salida se rige por cambiar la visibilidad de VISIBLE a INVISIBLE. Si la transición es nula, las vistas no se verán afectadas.
SetExitTransition
- Devolver la transición maneja la ventana de cierre, en lugar de salir y no afecta a la visibilidad de la ventana.
Referencia a un recurso XML de transición que define la transición deseada utilizada para mover vistas fuera de la escena cuando la ventana se está preparando para cerrar. Corresponde a setReturnTransition (android.transition.Transition).
Android: windowReturnTransition
- También recomendaría el uso de reingresar para manejar las prensas posteriores.
Referencia a un recurso XML de transición que define la transición deseada utilizada para mover vistas a la escena al volver de una actividad previamente iniciada. Corresponde a setReenterTransition (android.transition.Transition).
Android: windowReenterTransition
Descripción de las transiciones de elementos compartidos exit / reenter
- También puede establecer un valor de bool que permita que las transiciones se superpongan, sin embargo, la superposición puede ser demasiado larga para lo que desea.
SetAllowEnterTransitionOverlap (booleano)
- También actualizaría el lollipop a 5.0.1
Hay errores en 5.0.0 que se han corregido en 5.0.1
Este blog de Linton Ye cubre en detalle los problemas que rodean las transiciones y bichos de Lollipop.
Mi viaje a Lollipop Transitions: parte 1
- Arquitectura de la aplicación de consumidor y proveedor de Laravel
- ¿Cómo puedo eliminar el título y el icono de forma completa en Actionbar sherlock?