在我的活动中,我有一个按钮,其中包含以下点击侦听器:
final ImageButton startOverButton = (ImageButton) findViewById(R.id.start_over_button);
startOverButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(final View v) {
finish();//go back to the previous Activity
overridePendingTransition(R.anim.comming_in, R.anim.comming_out);
}
});
它以我想要的方式动画返回上一个活动。但是,当用户按下Android默认后退按钮时,不会触发动画。我的问题是:我应该在哪里放置动画代码 overridePendingTransition(R.anim.comming_in,R.anim.comming_out); 以便在用户点击我的按钮时触发此动画默认的Android后退按钮?
作为一个天真的尝试,我试图将 overridePendingTransition(R.anim.comming_in,R.anim.comming_out); 代码行放在 onDestroy()方法,但它没有用。
提前谢谢!
答案 0 :(得分:104)
也许你可以在活动中的onBackPressed()方法中完成这项工作。
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.comming_in, R.anim.comming_out);
}
答案 1 :(得分:15)
基本上覆盖onBackPressed是一种正确的方法,但不是从它调用finish(),我会说最好调用super.onBackPressed()然后添加overridePendingTransition,这样我们就可以更加符合继承规则了。 / p>
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.comming_in, R.anim.comming_out);
}
答案 2 :(得分:4)
即使覆盖onBackPressed()
是一个不错的选择,我建议覆盖finish()
方法,以防活动以其他方式完成,例如导航操作或任何其他视图操作"破坏"活动:
@Override public void finish() {
super.finish();
overridePendingTransition(0,0);
}
我们需要考虑在按下后退按钮后触发此方法,所以我们很高兴: - )
更新:此外,如果我们在其中使用片段,覆盖onBackPressed()
可能会搞乱活动,因为我们可能不希望每次都覆盖转换背部被压了。
答案 3 :(得分:2)
如果你使用片段,你可以这样继续:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.anim_slide_in_left, R.anim.anim_slide_out_left, R.anim.anim_slide_out_right, R.anim.anim_slide_in_right);
transaction.replace(R.id.fragment_container, new YourClassFragment);
transaction.addToBackStack(null);
transaction.commit();
anim_slide_in_left
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:interpolator="@android:interpolator/decelerate_quint"
android:fromXDelta="100%p"
android:toXDelta="0%p" >
</translate>
</set>
anim_slide_out_left
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:interpolator="@android:interpolator/decelerate_quint"
android:fromXDelta="0%p"
android:toXDelta="-100%p" >
</translate>
</set>
anim_slide_out_right
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:interpolator="@android:interpolator/decelerate_quint"
android:fromXDelta="-100%p"
android:toXDelta="0%p" >
</translate>
</set>
anim_slide_in_right
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:interpolator="@android:interpolator/decelerate_quint"
android:fromXDelta="0%p"
android:toXDelta="100%p" >
</translate>
</set>