¿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.

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> 

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> 
  1. 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

  1. 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

  1. 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

  1. 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)

  1. 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

  • Nuevo tema.AppCompat ActionBar altura
  • Cómo cambiar el diseño de android biblioteca de soporte FAB Button color de la frontera?
  • Material de diseño progressdialog
  • Cómo cambiar programáticamente el color primario en Android L
  • Error de tinte del widget de estilo de material AppCompat
  • Androide: Elevación no respetada a través de FragmentTransactions
  • Diseño como la aplicación HotStar
  • AppCompat ShareActionProvider icono es demasiado grande en comparación con otros iconos
  • Para bibliotecas de soporte de materiales de Android, ¿dónde puedo encontrar CardView y RecyclerView?
  • Botón de alternancia en el cajón de navegación
  • Eliminar espacio entre los elementos de RecyclerView android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.