滑出动画不适用于后按按钮?

slide out animation not working on back press button?

我在进入或退出 activity 时使用动画,进入 activity 动画效果很好,但退出动画效果不佳。当我按下后退时我开始退出动画 button.What 发生的是它首先启动当前 activity 的进入动画然后显示最后一个 activity 我想要的后退按钮按下时的简单退出动画。

Slide_out.xml

    <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="0%p"
    android:toXDelta="-100%p" >

</translate>

Slide_in.xml

    <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="100%p"
    android:toXDelta="0%p" >

</translate>

按下操作栏后退按钮

public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()) {
    case R.id.home:

        finish();
        overridePendingTransition(R.anim.slide_out, R.anim.slide_in);
        return true;


    default:
        break;
    }

    return super.onOptionsItemSelected(item);

}

onBackPressed中添加动画,点击后退按钮时会显示动画。

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.slide_in, R.anim.slide_out);   
}

我做了一些类似的事情,它工作正常,你可以用 startAnimation(your_xml) 改变 animate(),你还必须使 activity 背景透明:

<item name="android:windowBackground">@android:color/transparent</item>

这个activity会向下滑动,由于透明背景,滑动的瞬间MainActivity是可见的。 编辑 - 使用工具栏后退按钮:

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            mainlinear.animate()
                    .translationY(ScUtils.getScreenHeight(getApplicationContext()))
                    .setDuration(210)
                    .setInterpolator(new AccelerateInterpolator())
                    .setListener(new AnimatorListenerAdapter() {
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            ThemeActivity.super.onBackPressed();
                            overridePendingTransition(0, 0);
                           }
                          }).start();
                        }
                    });

首先在你的 anim 文件夹中再创建一个动画,即 nothing.xml

nothing.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="0%"
    android:toXDelta="0%" >

</translate>

这是你的slide_in.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="-100%"
    android:toXDelta="0%" >

</translate>

slide_out.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="0%"
    android:toXDelta="100%" >

</translate>

现在像这样调用你的 NewActivity

startActivity(new Intent(CurrentActivity.this, NewActivity.class));
overridePendingTransition(R.anim.slide_in, R.anim.nothing);

然后在您的后退按钮上单击执行此操作

finish();
overridePendingTransition(R.anim.nothing, R.anim.slide_out);

我用过 slide_in.xml

    <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="100%"
    android:toXDelta="0%" >

</translate>

slide_out.xml

    <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="0%"
    android:toXDelta="-100%" >

</translate>

slide_enter.xml

  <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="-100%"
    android:toXDelta="0%" >

</translate>

slide_exit.xml

    <?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromXDelta="0%"
    android:toXDelta="100%" >

</translate>

代码

        Intent i=new Intent(Authentication.this,Login.class);
        startActivity(i);
        overridePendingTransition(R.anim.slide_in, R.anim.slide_out);

到上一个

         finish();
         overridePendingTransition(R.anim.slide_enter, R.anim.slide_exit);

对于 Activity 进入动画,请在 onCreate(...) 函数中使用 overridePendingTransition(R.anim.slide_out, R.anim.slide_in);

对于退出动画,在 onPause(...) 中放置相同的调用。

我的操作栏上有一个 back/home 按钮,它没有通过覆盖 onBackPressedfinish 来拾取幻灯片动画。所以我不得不从 here 添加这个片段。如果使用与上面相同的 slide_enterslide_exit

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    switch(id) {
        // back button
        case android.R.id.home:
            finish();
            overridePendingTransition(R.anim.slide_enter, R.anim.slide_exit);
            return true;
    }

    return super.onOptionsItemSelected(item);
}

万一有人觉得它有用。

我通过覆盖后退按钮行为解决了这个问题。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    finish();
    return true;
}