在活动变化上构建类似iOS的过渡

时间:2017-11-28 09:36:47

标签: java android xml

所以,我试图在我的Android应用程序中的两个活动之间建立一个转换,看起来类似于iOS应用程序中的转换。而我的#34;进入转型期"工作完美,我希望它的工作方式,新的布局滑过旧的布局,而旧布局稍微向左移动。但是现在我仍然坚持反向过渡,回到我的第一个布局,因为我希望它看起来与第一个过渡完全相同,但只是反转,我无法实现,导致Android自动将移动过渡移动到移出过渡的顶部,如附图中所示。

所以我会有两个想法来解决这个问题。是否有可能改变过渡层?如果没有,也可以在移动过程中移动动画面罩。但是对于这些可能性,我都知道如何实现它们。

enter image description here

我目前的代码:

我只是在我的两项活动的OnCreate上调用动画:

我主菜单的OnCreate:

@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 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" />

我的xml文件: slide_in_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" />

滑出-left.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_in_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" />

slide_out_right.xml

WITH CTE AS (
    SELECT *
    FROM (VALUES (1,'John.jpg',0,NULL),
                 (2,'Jane.jpg',0,NULL),
                 (3,'George.jpg',0,NULL),
                 (4,'Susan.jpg',0,NULL),
                 (5,'John2.jpg',0,1),
                 (6,'Susan2.jpg',0,4),
                 (7,'John3.jpg',1,1)) AS V (ID, [Filename], [Version], Parent)),
RNs AS(
    SELECT COALESCE(C2.ID,C1.ID) AS ID,
           COALESCE(C2.[Filename],C1.[Filename]) As [Filename],
           COALESCE(C2.[Version],C1.[Version]) AS [Version],
           COALESCE(C2.Parent,C1.Parent) AS [Parent],
           ROW_NUMBER() OVER (PARTITION BY C1.ID ORDER BY C2.[Version] DESC) AS RN
    FROM CTE C1
         LEFT JOIN CTE C2 ON C1.ID = C2.Parent
    WHERE C1.Parent IS NULL)
SELECT ID, [Filename], [Version]
FROM RNs
WHERE RN = 1;

1 个答案:

答案 0 :(得分:0)

在您的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;
            }
        }

并按原样设置活动。

如果有任何问题,请尝试告诉我。

快乐编码:)