覆盖挂起转换,以便顺利地将活动滑入和滑出

2022-09-01 17:19:29

我很难弄清楚如何通过按下按钮将活动滑入和滑出。我想要的是让用户按下一个按钮,然后屏幕滑动。我想要的方式是让第一个活动(带有按钮的活动)向左滑出,而新的第二个活动从右侧滑入。

使用下面的代码,当单击按钮时,当我希望第一个活动向左滑出时,它向右滑动。然后,当它完成滑动时,剩下的只是一瞬间的黑屏,然后第二个活动刚刚出现并且不会滑入。

因此,第一个活动滑出不正确的方向,下一个活动只是出现而不是滑动。我做错了什么?我很难理解XML文件,所以听到下面所有内容的代码。

第一次活动

@Override
public void onCreate(Bundle savedInstanceState) {

    playBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(MainMenu.this, Levels.class);
            startActivity(intent);
            overridePendingTransition(R.anim.enter_from_right, R.anim.exit_out_left);
        }
    });

第二次活动

@Override
public void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.levels);

    overridePendingTransition(R.anim.enter_from_left, R.anim.exit_out_right);

所以我认为我的一些XML文件可能不正确。他们来了。

enter_from_left.xml

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

    <translate
        android:duration="600"
        android:fromXDelta="100%"
        android:toXDelta="0%" >
    </translate>
</set>

enter_from_right.xml

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

    <translate
        android:duration="600"
        android:fromXDelta="-100%"
        android:toXDelta="0%" >
    </translate>
</set>

exit_out_left.xml

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

    <translate
        android:duration="600"
        android:fromXDelta="0%"
        android:toXDelta="-100%" >
    </translate>
</set>

exit_out_right.xml

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

    <translate
        android:duration="600"
        android:fromXDelta="0%"
        android:toXDelta="100%" >
    </translate>
</set>

编辑从第 2 个活动中删除 它使得第 1 个活动滑出到左侧,这就是我想要的。但是,当第 1 个活动滑出时,它仍然只是显示一个黑屏,而不是让第 2 个活动从右侧滑入。overridePendingTransition()


答案 1

无需覆盖两个活动中的动画和新活动,您只需要在调用后覆盖动画即可。startActivity()onCreate()startActivity()

您提供的两个 s 对应于两个动画 - 删除旧动画并添加新动画。intoverridePendingTransition(int enterAnim, int exitAnim)Activity

对于您的第二个问题,我相信您的 fromXDelta 设置错误,-100% 应该一直远离屏幕的左侧,而不是右侧,因此将其更改为 100% 应该可以修复它。


答案 2

看看我的要点,它完美地工作:

1.覆盖 CommonActivity 的 startActivity 和 finish

 @Override
    public void startActivity(Intent intent) {
        super.startActivity(intent);
        overridePendingTransition(R.anim.from_right_in, R.anim.from_left_out);
    }

    @Override
    public void finish() {
        super.finish();
        overridePendingTransition(R.anim.from_left_in, R.anim.from_right_out);
    }

2.from_left_in.xml

    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-100%p"
               android:toXDelta="0"
               android:duration="300"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
   </set>

3.from_right_in.xml

   <set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%p"
               android:toXDelta="0"              android:interpolator="@android:interpolator/accelerate_decelerate"
               android:duration="300"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>

4.from_left_out.xml

   <set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0"
               android:toXDelta="-100%p"
               android:duration="300"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>

5.from_right_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0"
               android:toXDelta="100%p"
               android:duration="300"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>

要点链接: https://gist.github.com/JagieChen/f5cc44bf663f3722bd19097be47ccf9b


推荐