用DrawerLayout打开Activity时如何消除延迟?

我有一个DrawerLayout的活动,但每当它打开时有一个像屏幕是白色,然后我的屏幕画的分秒的延迟。

转换完成后会发生这种情况。 所以它看起来像屏幕animation转换跳跃。

绑定与ButterKnife的意见后,我试图把这个在我的OnCreate,但它什么都没做。

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; } }); } 

是的,我正在优化它的棒棒糖,并为pre-Lollipop设备我jsut使用overridePendingTransitions它工作正常。 我的问题只在棒棒糖设备上。

顺便说一句,我的进入和退出转换都是在xml中定义的fade_in_out和指定的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> 

我终于find了解决办法。 我不知道为什么或如何解决,但我只知道它消除了animation中的延迟。 我在活动的OnCreate中添加了一个处理程序,这个处理程序会运行其他的设置语句,也就是说在300ms之后把最初的片段添加到视图中

 Handler mHandler = new Handler(); mHandler.postDelayed(new Runnable() { @Override public void run() { switchFragment(); } }, 300); 

也许是因为棒棒糖在UI元素上有默认的layoutTransition,你试过了吗?

drawerLayout.setLayoutTransition(null)

我会改变你的退出过渡:

 item name="android:windowExitTransition">@transition/fade_in_out_transition</item> item 

到窗口返回:

 name="android:windowReturnTransition">@transition/fade_in_out_transition</item> 
  1. 当您使用窗口退出时,窗口的可见性在下次转换开始之前短暂变为不可见。

当不popup背面堆栈时,设置将用于将视图移出场景的过渡,当片段被移除,隐藏或分离时。 退出的Views将是那些具有isTransitionGroup()的常规View或ViewGroup返回true。 典型的转换将扩展可见性,因为退出是由可见性改变为不可见的。 如果转换为空,视图将保持不受影响。

setExitTransition

  1. 返回转换处理窗口closures,而不是退出,并不影响窗口的可见性。

参考Transition XML资源,该资源定义了当窗口准备closures时用于将视图移出场景的所需Transition。 对应于setReturnTransition(android.transition.Transition)。

机器人:windowReturnTransition

  1. 我也build议使用重新input来pipe理后面的印刷机。

参考Transition XML资源,该资源定义了从以前启动的Activity返回时用于将Views移动到场景中的期望的Transition。 对应于setReenterTransition(android.transition.Transition)。

机器人:windowReenterTransition

了解退出/重新input共享元素转换

  1. 您还可以设置一个布尔值,这将允许转换重叠,但重叠可能太长,你想要的。

setAllowEnterTransitionOverlap(布尔)

  1. 另外我会升级棒棒糖5.0.1
    5.0.0中已经修复了一些bug

这个由Linton Ye撰写的博客详细介绍了棒棒糖转换和错误的相关问题。

我的棒棒糖转换之旅:第1部分