【问题标题】:Modify programmatically overridePendingTransition animations以编程方式修改 overridePendingTransition 动画
【发布时间】:2017-10-02 08:15:11
【问题描述】:

我想用自定义翻译动画开始一个新活动,所以我在 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

【问题讨论】:

  • 为什么我被否决了?
  • 找到了解决办法!发布在下面

标签: android android-activity android-animation android-transitions activity-transition


【解决方案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;

如果您想要在BackPressed 或您的活动结束时出现反向动画:

@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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-04
    • 2015-02-27
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    相关资源
    最近更新 更多