web-dev-qa-db-ja.com

Android "側から入る"の新しいアクティビティ

新しいアクティビティに移動する最善の方法は何ですか。ただし、アクティビティが左にスライドし、新しいアクティビティが画面に表示されるようにするにはどうすればよいですか。新しいアクティビティを呼び出すためにインテントを使用していますが、アプリケーションを軽量にしたい場合はそれを行う方法ですか?

もう少し詳しく説明すると、私のAndroid電話では、ホームを右にスワイプして、左から友達のストリームに入り、画面上で行われます。私のアプリでボタンをクリックしてそれを実行してください、それは私が求めている「スライド」です。

37
kakka47

Android OS 2.1以降では、OverridePendingTransition()メソッドを使用して、探しているアクティビティアニメーション間の遷移の種類を提供できると思います。

まず、/ res/anim /でいくつかのアニメーションリソースを定義します。 right_slide_out.xmlという名前のファイルを次に示します。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:interpolator="@Android:anim/accelerate_decelerate_interpolator">
    <translate
        Android:fromXDelta="0"
        Android:toXDelta="100%p"
        Android:duration="500"
    />
</set>

right_slide_in.xmlと呼ばれる別の:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:interpolator="@Android:anim/accelerate_decelerate_interpolator">
    <translate
        Android:fromXDelta="100%p"
        Android:toXDelta="0"
        Android:duration="700"
    />
</set>

次に、新しいアクティビティを開始するときに、次のようにOverridePendingTransitionメソッドを使用します。

startActivity(intent);
overridePendingTransition  (R.anim.right_slide_in, R.anim.right_slide_out);

これは、アクティビティを開始するための遷移アニメーションを処理する必要があります。

逆の場合、そのアクティビティが終了して元のアクティビティに戻ると、少し霧が増します。

そのアクティビティを終了してActivity.finish()を呼び出すUIコントロールがある場合は、直後にoverridePendingTransition()を追加するだけで済みます。

ユーザーが戻るボタンを押してアクティビティを終了した場合に対処するには、次のようなものを使用します。

@Override
public void onBackPressed() 
{

    this.finish();
    overridePendingTransition  (R.anim.right_slide_in, R.anim.right_slide_out);
}
90
mmeyer

Left_slide_out.xmlを使用して(Joshのright_slide_out.xmlのtoXDeltaを変更して-100%pを読み取る)、古いアクティビティを左側に表示しないようにすることができます(両方のアニメーションで継続時間が同じです)。

ジェムスは正しいです。デフォルトでは、新しいインテントを起動するとスライドアニメーションが表示されます。

さらにカスタムアニメーションを探している場合は、 overridePendingTransition を使用できます。 APIレベル5で追加されたことに注意してください。使用例については、これを参照してください APIデモ

3
Noel

はい、インテントを使用することは別のアクティビティを開始する標準的な方法であり、通常、あなたが言及するスライドを行います。例えばstartActivity(new Intent(this、myNextActivity.class));それを行います。

3
Jems

開始アニメーションと終了アニメーションが何であるかについては、少し混乱があります。まだ熟考している人のために、ここにテンプレートがあります。

overridePendingTransition(
    enterAnimationForCalledActivity, 
    exitAnimationForCallingActivity
);

これはおそらく少し空気をきれいにするはずです。

1
Ram Iyer