如何使用DrawerLayout打开活动时删除延迟?

我有一个带有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; } }); } 

是的我正在为Lollipop优化它,对于pre-Lollipop设备我使用overridePendingTransitions ,它运行正常。 我的问题只在Lollipop设备上。

顺便说一句,我的Enter和Exit转换都是在xml中定义的fade_in_out并在styles指定

  @color/pink false true true true true   @transition/fade_in_out_transition @transition/fade_in_out_transition  @transition/change_clip_bounds @transition/change_clip_bounds stateAlwaysHidden|adjustResize  

我终于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 

到窗口返回:

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

设置当不popup后端堆栈时删除,隐藏或分离片段时用于将视图移出场景的Transition。 退出的视图将是那些具有isTransitionGroup()的常规视图或ViewGroup返回true的视图。 典型的过渡将扩展可见性,因为退出是通过将可见性从可见变为可见来控制的。 如果transition为null,则视图将不受影响。

setExitTransition

  1. 返回过渡处理窗口关闭,而不是退出并且不影响窗口可见性。

引用Transition XML资源,定义所需的Transition,用于在Window准备关闭时将Views移出场景。 对应于setReturnTransition(android.transition.Transition)。

机器人:windowReturnTransition

  1. 我还建议使用重新输入来管理背压。

引用Transition XML资源,定义所需的Transition,用于在从先前启动的Activity返回时将Views移动到场景中。 对应于setReenterTransition(android.transition.Transition)。

机器人:windowReenterTransition

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

  1. 您还可以设置允许过渡重叠的bool值,但重叠可能太长,无法满足您的需要。

setAllowEnterTransitionOverlap(布尔)

  1. 我也将棒棒糖升级到5.0.1
    5.0.0中的错误已在5.0.1中修复

Linton Ye的这篇博客详细介绍了围绕Lollipop过渡和错误的问题。

我的棒棒糖过渡之旅:第1部分