java - 在 Activity 更改时构建类似 iOS 的 Transition

标签 java android xml

因此,我正在尝试在我的 Android 应用程序中的两个 Activity 之间建立一个转换,这看起来类似于 iOS 应用程序中的转换。我的“Going in Transition”工作得非常好,按照我希望的方式工作,新布局滑过旧布局,而旧布局向左移动一点。但现在我坚持使用反向过渡,回到我的第一个布局,因为我希望它看起来完全像第一个过渡,但只是反向,这是我无法实现的,导致 Android 自动分层移动移出过渡之上的过渡,如您在随附的 gif 中所见。

所以我有两个想法来解决这个问题。是否有可能更改过渡层?如果没有,也可以为移动蒙版制作动画,好吧,我在过渡中移动。但是对于这两种可能性,我都知道如何实现它们。

enter image description here

我当前的代码:

我只是在我的两个 Activity 的 OnCreate 上调用动画:

我的主菜单的 OnCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    overridePendingTransition(R.anim.slide_in_left,R.anim.slide_out_left);
    setContentView(R.layout.activity_main);
}

在创建我的设置时:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right);
    setContentView(R.layout.activity_settings);
}

还有我的 xml 文件: slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"

android:fromXDelta="-30%p"
android:toXDelta="0"

android:duration="@android:integer/config_longAnimTime" />

滑出-left.xml

<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"

android:fromXDelta="0"
android:toXDelta="100%p"

android:duration="@android:integer/config_longAnimTime" />

slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"

android:fromXDelta="100%p"
android:toXDelta="0"

android:duration="@android:integer/config_longAnimTime" />

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"

android:fromXDelta="0"
android:toXDelta="-30%p"

android:duration="@android:integer/config_longAnimTime" />

最佳答案

在您的 MainActivity 中

       private boolean isReverseAnimation = false;
           @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                isReverseAnimation = false;
 overridePendingTransition(R.anim.anim_slide_in_left,R.anim.anim_slide_out_left);
//your other code
}

        @Override
        protected void onStart() {
            super.onStart();
            if (isReverseAnimation) {
                this.overridePendingTransition(R.anim.anim_slide_in_right,
                        R.anim.anim_slide_out_right);

            }else{
                isReverseAnimation = true;
            }
        }

并按原样设置 Activity 。

尝试让我知道是否有任何问题。

快乐编码:)

关于java - 在 Activity 更改时构建类似 iOS 的 Transition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47528161/

相关文章:

java - .classpath 内容在 eclipse 中更新

java - 如何在android中使用 Volley 发送参数数组

java - Sharedpreferences 中的值输入无效

android - 如何在 drawableLeft 中设置图像的宽度和高度

java - 如何在依赖项目上强制安装maven?

java - setAdapter() 上的 NullPointer 异常

android - ListView clickEvent 选择了错误的数据库行 ID - 帮助!

xml - FLEX 数据网格和 XML 列表内容

java - 在 Java 中访问 xml 文件并更新它

php - iPhone Web服务NSData和PHP