0

我在我的应用程序的登录部分有一个简单的动画片段转换 - 请参阅 anim.xml。片段具有来自 xml 中可绘制对象的背景设置,除非我在具有全高清显示的智能手机上测试它,否则一切正常。过渡突然变得迟缓。任何人都知道可能导致这种情况的原因是什么?两种背景的分辨率均为 1080*1920。

anim.xml - 动画示例(其中 4 个用于两侧的进出动画)

<?xml version="1.0" encoding="utf-8"?>
<set>
  <translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromXDelta="-100%"
   android:toXDelta="0"
   android:interpolator="@android:anim/decelerate_interpolator"
   android:duration="250"/>
</set>
4

3 回答 3

3

几年后的经验 - 将您的图像放入 drawable-nodpi

诺皮

这些是与密度无关的资源。无论当前屏幕的密度如何,系统都不会缩放带有此限定符标记的资源。

-anydpi 和 -nodpi 有什么区别?

于 2018-03-12T12:06:32.867 回答
2

对我来说,您似乎遇到了性能问题(可能是 GPU,也许您有过度绘制)。我不知道它的原因是什么,但有很多工具可以帮助您更好地了解正在发生的事情。看看这篇文章http://www.curious-creature.com/docs/android-performance-case-study-1.html

android 性能模式视频也可能会有所帮助。我强烈建议观看这些:

工具 - 配置文件 GPU 渲染https://www.youtube.com/watch?v=VzYkVL1n4M8

透支https://www.youtube.com/watch?v=T52v50r-JfE

用户界面和 GPU https://www.youtube.com/watch?v=WH9AFhgwmDw

为什么是 60 毫秒https://www.youtube.com/watch?v=CaMTIgxCSqU

于 2015-08-06T13:02:22.607 回答
1

好吧,经过一段时间(长时间)尝试解决此问题后,我的问题的唯一解决方案是将片段事务之前的背景图像更改为一些低分辨率图像并检查动画结束以将其更改回高分辨率图像。丑陋但至少它有效。

不过,如果你以后走这条路,预计在检测动画结束时会遇到一些麻烦。片段具有 onCreateAnimation 方法,您可以在其中添加 AnimationListener,该方法具有检测动画开始、重复和结束的方法,但它具有检测动画结束的错误行为。回调在动画结束之前触发,这使您的片段事务在即将结束时滞后(在我的情况下,它是最后十个像素左右)。

以一种非常丑陋的方式解决了它 - 在动画结束时实现了 10 毫秒的 CountDownTimer,并在定时器结束后将背景更改为高分辨率。

此外,Fragment 的 onCreateAnimation 文档很少,所以你不知道它的参数是什么,我发现这个亚洲网页帮助我理解了它。
http://y-anz-m.blogspot.cz/2013/05/support-package-fragmenttransaction.html

无论如何,我不知道 FragmentTransaction 的背景是如何工作的,但感谢 Google 对 FragmentTransactions 和 AnimationListeners 的出色实现。

于 2015-08-06T12:37:54.647 回答