自定义活动转换不适用于Nexus4

时间:2013-10-08 08:10:54

标签: android android-activity android-animation

我已经宣布了两个自定义动画,它们在运行Android 2.3.5 HTC Sense 3.5的HTC Desire上工作正常(自定义ROM,Endymion V3.5,所以我可以在ICS之前在OS上测试)。在打开新活动时,新屏幕从右侧滑入,在关闭当前活动时,新屏幕从左侧滑入,所以一切都很好。我的代码是:

overridePendingTransition(com.my.app.R.anim.slidein, com.my.app.R.anim.slideout);

声明动画的xmls如下:

slidein.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
           android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
       android:duration="@android:integer/config_mediumAnimTime" />

slideout.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
           android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
       android:duration="@android:integer/config_mediumAnimTime" />

然而,问题出现了。

相同的apk部分适用于Nexus4。打开新活动时,它可以正常工作,新屏幕从右侧滑入。关闭当前活动时,前一个屏幕只显示默认动画,忽略我的自定义动画。我的Nexus4上有Unofficial CM 10.2, with android 4.3

我的问题是:它应该在Android 4.3上运行吗?也许在更新的API级别上,还有另一种方法,我需要调用才能实现这一目标吗?任何帮助表示赞赏!

干杯

编辑:我宣布了自定义退出动画,并且与建议的解决方案相结合,它现在按预期工作。

closeslidein.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
           android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
       android:duration="@android:integer/config_mediumAnimTime" />

closeslideout.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
           android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
       android:duration="@android:integer/config_mediumAnimTime" />

完成过程:

@Override
public void finish()
{
    super.finish();
    overridePendingTransition(com.my.app.R.anim.closeslidein, com.my.app.R.anim.closeslideout);
}

1 个答案:

答案 0 :(得分:1)

确保正确拨打电话。如果您明确地呼叫finish(),则需要立即致电overridePendingTransition()。如果您未明确调用finish(),则需要覆盖onBackPressed()并在其中调用overridePendingTransition()