私の活動では、次のクリックリスナーを備えたボタンがあります。
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()メソッドに入れようとしましたが、うまく行かなかった。
前もって感謝します!
アクティビティのonBackPressed()メソッドでこの作業を行うことができます。
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.comming_in, R.anim.comming_out);
}
基本的にonBackPressedをオーバーライドすることは適切なアプローチですが、それからfinish()を呼び出すよりも、super.onBackPressed()を呼び出してoverridePendingTransitionを追加することをお勧めします。これにより、継承ルールともう少し一貫性が保たれます。
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.comming_in, R.anim.comming_out);
}
onBackPressed()
をオーバーライドするのは良いオプションですが、アクティビティがナビゲーションアクションや他のビューアクションなど他の方法で終了した場合に備えて、finish()
メソッドをオーバーライドすることをお勧めしますアクティビティを「破壊」します。
_@Override public void finish() {
super.finish();
overridePendingTransition(0,0);
}
_
戻るボタンが押された後にこのメソッドがトリガーされることを考慮する必要がありますので、行ってください:-)
更新:さらに、onBackPressed()
をオーバーライドすると、その中にフラグメントを使用している場合、アクティビティが台無しになる可能性があります。押された。
フラグメントを使用する場合、次のように進めることができます。
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>