android - XML 定义的动画中指定的持续时间是否真的以毫秒为单位?

标签 android android-fragments android-animation android-support-library

我正在使用最新版本的支持库,以允许在运行 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/

相关文章:

android - 使用属性动画缩放 WebView

android - RecyclerView item展开动画

android - 支持设计库异常

java - Android模拟器无法加载原生库

android - 在 Activity 中永久隐藏导航栏

Android ListView 膨胀了两次

java - 如果在 mediaplayer.start() 之前调用 mediaplayer.pasue() ,则不会播放音乐

java - 在 Activity B 的 Activity 中返回 onActivityResult,从 ActivityA 的子 fragment 开始

android - 列表 fragment 简单示例

Android页面 curl 动画