以编程方式修改覆盖PendingTransition动画

6

我想使用自定义的翻译动画启动一个新的活动,因此我在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" />

有没有办法通过程序修改/创建活动转换的动画?在这种情况下,可以动态地使用特定值修改fromXDelta。

我为什么被踩了? - moyo
找到了解决方案!已在下面发布。 - moyo
1个回答

1
我会在做一些研究后回答。你需要两件事情:
1 - 在AndroidManifest中设置以下主题来创建一个“透明”的活动。如果不这样做,将会出现一个空白屏幕:
<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;

如果您希望在按下返回键或活动结束时进行反向动画:
@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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接