我正在使用最新版本的支持库,以允许在运行 Android < 3.0 版本的设备上使用 fragment 。每当我想切换当前 fragment 时,我都会使用以下代码:
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。根据开发人员文档,此处指定的单位为毫秒(时间度量)。
我通过测试注意到不同设备的动画持续时间不同。如果我为持续时间指定毫秒值,为什么会这样?
以下是我测试过的设备和结果(主观):
HTC Legend:(CPU 速度较慢的低端手机,Android 2.3.3)动画流畅,持续时间与我希望的一样长。
Samsung Galaxy S:(中等 CPU,Android 2.1)动画有点不稳定,比 Legend 上的速度更快
模拟器:(在四核 iMac、Android 4.0 上运行)动画非常快,有时快到你甚至看不到它
据此看来,持续时间似乎并不是真正以毫秒为单位来衡量的,而是取决于 CPU 速度。有没有其他人注意到类似的结果?有没有一种方法可以设置它,以便在阅读文档后,动画速度在设备之间保持一致?
最佳答案
Android定义了3个整数资源
android.R.integer.config_shortAnimTime
android.R.integer.config_mediumAnimTime
android.R.integer.config_longAnimTime
您可以在 XML 或 Java 代码中使用。
关于android - XML 定义的动画中指定的持续时间是否真的以毫秒为单位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8187973/