Tho*_*ler 2 performance animation android android-fragments
我正在使用Google的compat lib在我的应用程序(Target SDK 16,Min SDK 8)中为2.2+上运行的设备启用片段.从功能的角度来看,这很好,但是通过设置的视图动画的性能
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(inTransition, outTransition, popInTransition, popOutTransition);
Run Code Online (Sandbox Code Playgroud)
inTransition
简单的翻译在哪里
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="@integer/animation_duration" />
</set>
Run Code Online (Sandbox Code Playgroud)
并且outTransition
是一个褪色动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="@integer/animation_duration" />
</set>
Run Code Online (Sandbox Code Playgroud)
对我的Galaxy S2(4.0.3)来说,这简直太糟糕了,即对于一个持续约350ms的动画我会说约.一半的帧被丢弃.我注意到如果我禁用淡出,性能会稍微提高(但不会太多),但当然动画的完整效果会消失,因为原始片段会立即变黑.我也尝试了代码的发布版本,但性能也没有提高.
我究竟做错了什么?如何使片段动画更流畅?
我建议的第一件事是在Manifest中启用硬件加速.这仅在具有API 3.0+的设备上启用,但会显着提高性能.使用API 11(3.0)及更高版本,您还可以利用View LayerTypes. 设置您要设置的任何动画,LAYER_TYPE_HARDWARE
然后将其设置回LAYER_TYPE_SOFTARE
或LAYER_TYPE_NONE
完成.
预蜂窝变得更加困难.您根本没有硬件加速.你最好检查一下if(api < 11) *use this animation* else *use this animation*
.滑动动画往往工作得相当顺利.Alpha动画是CPU的负担,尤其是当视图有很多层时.在您可以使用的最顶层父视图上应用任何动画(您正在设置整个片段的动画,因此它已经发生).
归档时间: |
|
查看次数: |
1932 次 |
最近记录: |