web-dev-qa-db-ja.com

アクティビティにアニメーションを追加するにはどうすればよいfinish()

私はアクティビティが作成され、それがうまく機能するときにoverridePendingTransitionを使用していますが、フェードインがうまく機能するのを見ることができますが、アクティビティの仕上げをアニメーション化しようとすると、デフォルトの右から左のスライドをまだ実行しています。

次のようにアクティビティを開始したときに、最初にoutアニメーションを定義しようとしました。

Intent myIntent = new Intent(a, SkdyAlert.class);
    myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    a.startActivity(myIntent);
    if (Android.os.Build.VERSION.SDK_INT > Android.os.Build.VERSION_CODES.DONUT) {
        AnimationHelper.overridePendingTransition(a, R.anim.fadein, R.anim.fadeout);
    }

それから私も活動を終えたときにやってみました

okBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            finish();
            if (Android.os.Build.VERSION.SDK_INT > Android.os.Build.VERSION_CODES.DONUT) {
                AnimationHelper.overridePendingTransition(activity, 0, R.anim.fadeout);
            }
        }
    });

ただし、これらのアプローチはどちらも、終了アニメーションの「右から左」スライドを妨げません。私が間違っていることに関するアイデアはありますか?

87
b-ryce

Finish()を呼び出した直後に保留中の遷移をオーバーライドします。

私の場合、移行を避けるためにそれを行っています。

finish();
Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing);

順序が重要です:)

213
Goofyahead

Finish()を呼び出す代わりに、onFuseでアニメーションを構成するためにisFinishing()メソッドを使用することをお勧めします。

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()){
        overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out);
    }

}
21

この質問はすでに答えていますが、アクティビティを終了するときにアニメーションを配置する最も効率的な方法は、関連するアクティビティの「finish()」メソッドをオーバーライドすることです。

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}
20
finish();
overridePendingTransition(0, 0);
18
Felipe

この種のアプローチを使用してこの問題を修正しました。

アニメーションで開くには:

 Intent newUser = new Intent(getBaseContext(), NewUserActivity.class);
    startActivity(newUser);
    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);

アニメーションで閉じるには:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return super.onOptionsItemSelected(item);
}

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

テーマを通してそれを調べてください。アクティビティまたはアプリケーション全体の入力/終了アニメーションを定義できます

12
schwiz

@schwizの回答に続いて、組み込みのDialogテーマのアニメーションオーバーライドを示します。ここでは、ローカルのslide_upおよびslide_downアニメーションを定義しています。私のアクティビティは、これらの遷移を出入りさせるためにテーマMyDialogを指定します。

<style name="Animation.MyDialog" parent="Android:Animation.Dialog">
    <item name="Android:windowEnterAnimation">@anim/slide_up</item>
    <item name="Android:windowExitAnimation">@anim/slide_down</item>
</style>

<style name="Theme.MyDialog" parent="Android:Theme.Dialog">
    <item name="Android:windowAnimationStyle">@style/Animation.MyDialog</item>
</style>
6
larham1

StartActivityForResultを使用して、子アクティビティと親アクティビティのonActivityResult()を開始します。

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==REQUEST_YOUR_ACTIVITY) {
        overridePendingTransition(R.anim.parent_appearing_anim, R.anim.child_dissmissing_anim);
    }
    super.onActivityResult(requestCode, resultCode, arg2);
}
4
Chris.Zou
if (getEnterAnimation() > -1 && getExitAnimation() > -1) {
    overridePendingTransition(getEnterAnimation(), getExitAnimation());
} 

これらのメソッドはR.anim.YOUR_ANIMATION_XMLからアニメーションを返します

前にこのコードをonCreate()に追加します

setContentView()

前のonPause()で

super.onPause()

これらのメソッドの前/内にこのコードを追加しようとしましたが、終了アニメーションが機能しませんでした

startActivity()
finish()
onBackPressed()
0