安卓棒棒糖动画故障

15

我在运行Android 5(棒棒糖)的设备上使用默认布局动画时遇到了奇怪的行为。我正在使用一个带有多个片段的活动,这些片段在运行时使用默认片段管理器替换。当替换旧片段时,我想使用动画来实现平滑的UI流程。在早期版本的Android设备上,动画的效果如预期一样,但在运行最新操作系统的设备上,片段之间的动画出现故障:

Glitch screen shot

我尝试使用默认的动画XML标记

android:animateLayoutChanges="true"

因为它不起作用,我使用了这段代码来更改它,但没有效果。

mTransaction = mManager.beginTransaction();
        mTransaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
        mTransaction.remove(mFragment);
        mTransaction.add(R.id.container, mFragment, "fragment");
        mTransaction.commit();

我已经在不同设备和安卓模拟器上测试了代码。奇怪的是,在运行早期版本的设备最新操作系统(5.0.1)的安卓模拟器上,它的效果如预期般正常工作。但是,在运行安卓5.0的Nexus 4和Nexus 5等设备上无法正常工作。

有什么建议吗?需要帮助吗?

提前感谢!

编辑:

这似乎是一个取决于使用设备的错误。我已经在不同设备上测试了代码(三星Galaxy S4、HTC One mini2、One M8、Desire S、Nexus 4&5),只在Google Nexus设备上出现了此问题。

编辑

解决动画问题的一种方法是通过在应用程序清单中使用<application android:hardwareAccelerated="false">标签来禁用硬件加速。但是使用该方法会使应用程序变得非常缓慢。

解决方案

解决这个问题的方法是为活动设置一个背景图像/颜色/可绘制对象。 详见


1
我在Nexus 5上遇到了与此类似的问题:链接 - GPack
请查看我的回答:https://dev59.com/xIXca4cB1Zd3GeqPLaWM#27224514 - MineConsulting SRL
你在Android清单文件中声明了使用OpenGL吗?我过去在Android 5.0以下版本也遇到过类似的问题,删除OpenGL声明后问题得到解决。 - E-Kami
不,我在这个应用程序中没有使用OpenGl,因此在清单中也没有声明OpenGl标签。 - user3749883
3
既然你已经自己找到了答案,请考虑在这里回复你自己的问题。 - Daniele Segato
只需在根布局中添加android:layerType="software"即可。 - Alexey Kurilov
1个回答

2

将根活动的background颜色设置为(即使对用户不可见!),图形故障就消失了。


1
这个解决方案只适用于少数设备。在Nexus 5上仍然存在此问题。 - user3749883
我遇到了同样的问题,使用Youtube Api Library播放YouTube视频时出现了故障。问题只出现在Nexus 5上,当我改变方向时。我解决了这个问题,每次发生方向改变时都设置根布局的背景颜色。 - Jose M Lechon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接