滑出动画不能按后退按钮?

时间:2015-02-14 05:12:50

标签: android animation android-activity android-animation

我在进入或退出活动时使用动画,进入活动动画工作正常但退出动画效果不佳。当我按下后退按钮时,我开始退出动画。发生的事情是它首先开始输入当前活动的动画,然后显示最后一个活动,我想在后退按钮上按下简单的退出动画。

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);

}

7 个答案:

答案 0 :(得分:20)

首先在动画文件夹中再创建一个动画,即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);

答案 1 :(得分:5)

我用过 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);

答案 2 :(得分:4)

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

我做过类似的事情并且工作正常,您可以使用startAnimation(your_xml)更改animate(),您还必须使活动背景透明:

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

此活动将向下滑动,由于透明背景,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();
                        }
                    });

答案 5 :(得分:0)

要为“活动”输入动画,请使用overridePendingTransition(R.anim.slide_out, R.anim.slide_in);函数中的onCreate(...)

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

答案 6 :(得分:0)

我在操作栏中有一个后退/主页按钮,该按钮没有通过覆盖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);
}

以防有人觉得有用。