onBackPressed()动画问题

时间:2015-12-24 11:35:11

标签: java android animation onbackpressed

我正在尝试覆盖onBackPressed()方法来设置我自己的动画,但发生的事情是它实际上从我的活动滑动到同一个,然后显示新的活动。

这是我的代码:

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

以下是动画:

向右滑出:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate android:duration="400" android:fromXDelta="0%" android:toXDelta="100%" />
<alpha android:duration="400" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>

向左滑动:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator= "false" >
<translate android:duration = "400" android:fromXDelta = "-100%" android:toXDelta = "0%" />
<alpha android:duration = "400" android:fromAlpha = "0.0" android:toAlpha = "1.0" />
</set>

感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

super.onBackPressed();删除此行然后工作

这是翻译 slide_in_from_left

   <set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
    android:duration="500"
    android:fromXDelta="-300%"
    android:fromYDelta="0%"
    android:toXDelta="0%"
    android:toYDelta="0%" />
  </set>

<强> slide_in_from_right

 <set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
    android:duration="500"
    android:fromXDelta="300%"
    android:fromYDelta="0%"
    android:toXDelta="0%"
    android:toYDelta="0%" />
  </set>

<强> slide_out_to_left

 <set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
    android:duration="500"
    android:fromXDelta="0%"
    android:fromYDelta="0%"
    android:toXDelta="-300%"
    android:toYDelta="0%" />
  </set>

<强> slide_out_to_right

 <set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
    android:duration="500"
    android:fromXDelta="0%"
    android:fromYDelta="0%"
    android:toXDelta="300%"
    android:toYDelta="0%" />
  </set>

/

@Override
public void onBackPressed()
{

    overridePendingTransition(R.anim.slide_out_right, R.anim.slide_in_left);
   // add which work after you back.
}

并添加您正在按下的功能。

答案 1 :(得分:0)

以下是您可以尝试解决的问题:

@Override
public void onBackPressed()
{
    finish();
    overridePendingTransition(R.anim.slide_out_right, R.anim.slide_in_left);


}

答案 2 :(得分:0)

编辑:以下是Android Developers Blog - Back and other hard keys: three stories

的答案
  

如果您要调查Android平台中的基本应用程序,   你会注意到一个相当常见的模式:添加一些魔法   拦截BACK键并做一些不同的事情。要做到这一点,   魔术需要看起来像这样:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}
     

如何拦截Activity中的BACK键也是常见的   我们看到开发人员提出的问题,因此从2.0开始我们有一个新的小API   使这更简单,更容易发现和正确:

@Override
public void onBackPressed() {
// do something on back.
return;
}
     

如果这就是你关心的事情,而你并不担心   在2.0之前支持平台版本,那么你就可以停下来了   这里。否则,请继续阅读。

所以你的代码应该是这样的

@Override
public void onBackPressed()
{

   overridePendingTransition(R.anim.slide_out_right, R.anim.slide_in_left);
   finish();
}

 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            overridePendingTransition(R.anim.slide_out_right, R.anim.slide_in_left);
            finish();
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }

答案 3 :(得分:0)

尝试一次,如果这对您有效,那么您可能会遇到其他一些部分的问题

<强> slide_out_down.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:fromYDelta="0%p"
    android:toYDelta="100%p" />

<强> slide_up_dialog.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:fromYDelta="100%p"
    android:toYDelta="0%p" />

并在您的活动中添加此

@Override
    public void onBackPressed() {
        finish();
        overridePendingTransition(R.anim.slide_up_dialog, R.anim.slide_out_down);
    }