Android等待Activity准备好执行动画

3

我遇到了一个问题,就是加载活动并开始任何形式的动画时出现了问题。通常情况下,当活动加载完成时,动画已经完成了一半或者完全不流畅。

而且这种情况大多数都会发生:进度旋转动画、recyclerview列表动画等等。

有没有办法在活动加载时平滑地处理动画?也许可以延迟所有操作,直到UI准备好处理动画和列表加载?

这是我的情况。

  1. 用户点击按钮打开活动,活动加载片段
  2. Fragment onActivityCreated启动进度条旋转器,并开始从共享首选项中检索保存的列表项,或者如果没有缓存,则进行异步网络调用(列表永远不超过10个项目,非常小的对象 ~8字符串)。
  3. RecyclerView使用适配器加载,并通过滑动/淡入来动画显示项目。

这两个动画,进度条和滑动/淡入,已经完成了一半,或者变得非常不流畅。有没有办法使它更加平滑?

这是需要翻译的列表: enter image description here

谢谢。

编辑:我会补充说明,在这个活动中,淡入动画不存在,滑入动画在加载时大约完成了一半。


你好!能否请您提供一下您的作品截图?谢谢。 - Kyle Emmanuel
@SikhWarrior:尝试在片段的onViewCreated方法回调后启动动画。 - Mehul Joisar
@MehulJoisar 抱歉,在问题中犯了一个错误,所有内容都在 onActivityCreated 中加载。将其移动到 onViewCreated 中会有什么区别吗? - SikhWarrior
@SikhWarrior:好的。那么这样做不会有任何区别,所以我猜你需要将动画移动到onStart方法中,因为它是当片段对用户可见时首先得到回调的方法。参考 - Mehul Joisar
@MehulJoisar 将其移至 onStart 并没有产生明显的差异。虽然我注意到同一活动中的后续片段没有相同的问题,而且运行顺畅。在这种情况下,我可以删除活动容器,并使其从按下按钮的片段过渡,但应用程序的其他部分需要新的活动并遭受加载。 - SikhWarrior
显示剩余11条评论
1个回答

3
自API级别21起,您可以实现 Activity#onEnterAnimationComplete() 回调并使用它来启动您的动画。不幸的是,目前似乎没有相应的AppCompat版本。
当我面对这个问题时,我决定在足够高的API级别上实现 onEnterAnimationComplete() 回调,而在较低的级别上,我简单地回退到在 onCreate() 中启动动画。

我也一直在使用这个回调函数,对于运行API 22及以上版本的设备来说似乎运行良好。然而在API 21上面会出现有时候不被调用或者被调用的情况。同时,我找到了这个SO问题,但是还没有答案。http://stackoverflow.com/questions/39488410/onenteranimationcomplete-not-called-api-21 - KikiTheMonk

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