2

我正在使用 Google 的兼容库在我的应用程序(Target SDK 16,Min SDK 8)中为在 2.2+ 上运行的设备启用片段。从功能的角度来看,这一切都很好,但是通过设置的视图动画的性能

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(inTransition, outTransition, popInTransition, popOutTransition);

哪里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>

并且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>

在我的 Galaxy S2 (4.0.3) 上简直太糟糕了,即对于持续约 350 毫秒的动画,我会说大约。一半的帧被丢弃。我注意到,如果我禁用淡出,性能会稍微好一些(但不是很多),但是当然动画的完整效果就消失了,因为原始片段立即变黑。我也尝试了代码的发布版本,但性能也没有提高。

我究竟做错了什么?如何使片段动画更流畅?

4

1 回答 1

7

我建议的第一件事是在清单中启用硬件加速。这只会在具有 API 3.0+ 的设备上启用,但会显着提高性能。使用 API 11 (3.0) 及更高版本,您还可以利用View LayerTypes。 设置您正在制作动画的任何内容,LAYER_TYPE_HARDWARE然后将其设置回LAYER_TYPE_SOFTARELAYER_TYPE_NONE完成后。

预蜂窝变得更加困难。你根本没有硬件加速。你最好检查一下if(api < 11) *use this animation* else *use this animation*。滑动动画往往工作得相当流畅。Alpha 动画是 CPU 的负担,尤其是当视图有很多层时。在最顶层的父视图上应用任何动画,你可以逃脱(你正在为整个片段制作动画,所以它已经发生了)。

于 2012-09-25T14:07:49.390 回答