我正在使用最新版本的支持库,以允许在运行 Android < 3.0 版本的设备上使用 Fragments。每当我想切换当前片段时,我都会使用以下代码:
public void displayFragmentInMainView(Fragment f) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left,
android.R.anim.slide_in_left, android.R.anim.slide_out_right);
transaction.replace(R.id.fragment_holder, f);
transaction.commit();
}
这是定义过渡动画之一的 XML:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-50%p" android:toXDelta="0"
android:duration="500"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="500" />
</set>
正如您在上面的 XML 中看到的,动画的持续时间设置为 500。根据开发人员文档,此处指定的单位是毫秒(时间度量)。
我通过测试注意到动画持续时间在设备之间是不同的。如果我为持续时间指定 ms 值,为什么会出现这种情况?
以下是我测试过的设备和结果(主观):
HTC Legend:(低端手机,CPU 速度慢,Android 2.3.3)动画很流畅,可以持续很长时间。
三星 Galaxy S:(中档 CPU,Android 2.1)动画有些不稳定,而且比 Legend 快
模拟器:(在四核 iMac,Android 4.0 上运行)动画非常快,有时快到你甚至看不到它
基于此,似乎持续时间并不是真正以毫秒为单位衡量的,而是取决于 CPU 速度。有没有其他人注意到类似的结果?有没有办法设置它,以便在阅读文档后,动画速度在不同设备上保持一致?