Android - 具有全高清显示的Laggy片段转换

时间:2015-08-04 13:35:25

标签: android android-fragments fragment-transitions

我的应用程序的登录部分有一个简单的动画片段转换 - 请参阅anim.xml。碎片的背景设置来自xml中的drawables,除非我在智能手机上用全高清显示器进行测试,否则一切正常。过渡突然变得迟钝。有人知道是什么原因引起的吗?两种背景都具有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>

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

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

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

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

答案 2 :(得分:1)

以后几年的经验 - 把你的形象放在drawable-nodpi

<强> nodpi

  

这些是与密度无关的资源。系统无法扩展   使用此限定符标记的资源,无论当前是什么   屏幕的密度。

What Is The Difference Between -anydpi And -nodpi?