Android片段动画的最佳实践

8

我有一个带有两个选项卡的活动。每个选项卡使用不同的片段。当发生特定事件,例如用户点击项目时,我会在同一活动中打开另一个片段。

我知道如何动态添加片段,也知道如何对其进行动画处理。

这里是我如何将片段添加到我的活动中的frameLayout

transaction.setCustomAnimations(R.animator.object_slide_in_up, R.animator.activity_hold)
transaction.add(R.id.flSellerHome, fragment)
transaction.commit()

在模拟器和新手机上一切运行正常。我已经测试了api 25的模拟器,现在闪烁已经出现,当我使用api 23的真实设备进行测试时,它会稍微闪烁,所以不会有影响,但是当我使用api 19进行测试时,闪烁太多了。

我的问题是有没有最佳实践来执行动画。

注释

  • 我的第三个动态添加的片段包含具有约20个本地数据库项目的recylerview,并且我还在后台线程中完成了db fatching。

  • 主线程没有负载。recyclerview也很简单,只有一个图像和三个文本。

  • 图像也是使用Glide加载的,我还有一个Glide的override函数**。

任何帮助都将不胜感激。


1
不给理由,请勿打负分。 - Lalit Jadav
1
我认为这个问题有点太宽泛了。也许手机的性能会影响行为?有太多可能的变量可以导致“闪烁”。而且在API版本之间移动可能会导致RecyclerView被处理的方式不同。最好对代码进行分析以帮助缩小问题范围。 - JoxTraex
1
许多事情可能会导致闪烁,如放大大尺寸图像、构建不良的复杂布局、在充气片段布局时在主线程上执行太多进程等。 - Oğuzhan Döngül
1
你的动画做得很好,但是请将小持续时间设置在150左右,否则会影响性能并可能导致ANR报告。 - Amjad Khan
需要更多的信息,但如果我要猜的话,我会说你的布局可能太复杂了。当添加一个片段时,您还会为整个活动获取请求布局,因此,如果您放置新片段的顶部布局很复杂,那么这将加剧问题。您应该对代码进行分析以更深入地了解问题所在。 - Mihai
显示剩余2条评论
3个回答

8

我发现问题出在recyclerview数据更新上。

我正在后台线程中加载数据,但当通知recyclerview时,它会卡顿一小段时间。

所以我做的是,延迟了与动画相同的时间来加载数据。

我不知道这是好主意还是坏主意。但对于我的项目来说已经太晚了,所以我使用了这个解决方法。


1

我想给你的回答留言,但是我的声望不够,但我想尝试向您提供建议,对此感到抱歉。

我正在后台线程中加载数据,但是当通知recyclerview时,它会卡住一小段时间。

尝试在点击后启动加载,显示简单的进度条,并在加载数据后隐藏进度条,将信息设置到您的片段中,然后显示片段。然后,当附加数据到适配器时,您将拥有所需的所有数据。

这应该看起来很好。


不要在不理解问题的情况下给出答案。 - Lalit Jadav
@LalitJadav 这不是答案,只是一些小建议。你可以听取或者不听取。 - H.Taras
@LalitJadav 我并没有问你什么。放松点。 - H.Taras

-3

如果只在API 19及以下版本出现问题,可能是设备性能不足。

也许问题并不是来自片段和动画,而是来自另一个功能,它会减慢UI线程的速度。通过功能,我指的是您的片段之间通信的方式。它们是否共享大量数据?或者重量级数据?如果是这样,您应该使用异步任务或线程。

祝好运!


我已经在我的问题中说了一切,没有任何其他功能会降低性能。顺便感谢帮助。 - Lalit Jadav

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