gpt4 book ai didi

android - 以编程方式修改 overridePendingTransition 动画

转载 作者:行者123 更新时间:2023-11-29 02:36:48 29 4
gpt4 key购买 nike

我想开始一个带有自定义翻译动画的新 Activity ,所以我在 xml 中将 overridePendingTransition 与我的动画一起使用。

overridePendingTransition(R.anim.enter_from_right, R.anim.exit_to_left)

enter_from_right.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="100%" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="350" />

有没有办法以编程方式为 Activity 转换修改/创建动画?在这种情况下,动态修改具有特定值的 fromXDelta

最佳答案

在做一些研究之后,我会自己回答。你需要两件事:

1 - 通过在 AndroidManifest 中设置以下主题来创建“透明” Activity 。如果不这样做,将出现空白屏幕:

<style name="TransparentActivity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>

2。手动创建一个 TranslationAnimation(或您想要的动画),将其应用于根 decorView,并通过将它们设置为 0 来禁用自定义动画:

        overridePendingTransition(0, 0);

// Custom transition
TranslateAnimation translateAnimation = new TranslateAnimation(-translationLength, 0, 0, 0);
translateAnimation.setDuration(350);
translateAnimation.setFillAfter(true);
View rootView = getWindow().getDecorView().findViewById(android.R.id.content);

rootView.startAnimation(translateAnimation);

rootView.getLayoutParams().width = translationLength;

如果你想要在 BackPressed 或你的 Activity 完成时反向动画:

@Override
public void finish() {
overridePendingTransition(0, 0);
TranslateAnimation translateAnimation = new TranslateAnimation(0, -translationLength, 0, 0);
translateAnimation.setDuration(350);
translateAnimation.setFillAfter(true);
translateAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}

@Override
public void onAnimationEnd(Animation animation) {
YourActivity.super.finish();
}

@Override
public void onAnimationRepeat(Animation animation) {

}
});
getWindow().getDecorView().findViewById(android.R.id.content).startAnimation(translateAnimation);
}

关于android - 以编程方式修改 overridePendingTransition 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46521795/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com