我正在尝试覆盖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>
感谢您的帮助。
答案 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);
}