overridePendingTransition用于平滑地进出滑动活动

Mat*_*att 19 java android transition android-activity

我无法通过按下按钮来确定如何将活动滑入和滑出.我想要的是用户按下按钮然后屏幕滑动.我想要的方式是第一个活动(带按钮的活动)向左滑动,而新的第二个活动从右侧滑入.

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

因此,第一个活动是滑出错误的方向,下一个活动只是出现而不是滑动.我究竟做错了什么?我很难理解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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

第二项活动

@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);
Run Code Online (Sandbox Code Playgroud)

所以我认为我的一些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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

编辑 删除overridePendingTransition()第二个活动,使第一个活动向左滑动,这是我想要的.但是,当第一个活动滑落时,它仍然只是显示黑屏而不是让第二个活动从右侧滑入.

pan*_*ini 20

您只需在调用后覆盖动画,而不是覆盖两者startActivity()和新活动中onCreate()的动画startActivity().

int是你提供overridePendingTransition(int enterAnim, int exitAnim)对应于两个动画-删除旧的Activity和添加新的.

对于你的第二个问题,我相信你的fromXDelta设置错误,-100%应该一直离屏幕的左侧,而不是右边,所以将其改为100%应该修复它.

  • overridePendingTransition将enterAnim作为第一个参数. (2认同)

Jag*_*gie 8

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

1.重写CommonActivity的startActivity并完成

 @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);
    }
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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