web-dev-qa-db-ja.com

アクティビティを開始するための右から左へのアニメーションを実現する方法

私は、アプリがactivityを開始するたびにアニメーションを適用するデモアプリケーションに取り組んでいます。以下のコードを書きましたが、これはアクティビティを左から右にアニメーション化するためです。

left_to_right.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shareInterpolator="false">
    <translate Android:fromXDelta="-100%" Android:toXDelta="0%"
        Android:fromYDelta="0%" Android:toYDelta="0%"
        Android:duration="500"/>
</set>

right_to_left.xml

<?xml version="1.0" encoding="utf-8"?>

<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="100%"
        Android:toYDelta="0%" />
</set>

私はこのようにactivityを始めています

startActivity(new Intent(this, LoginActivity.class));
overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);

右から左にアニメーションを実現したい。これを行う方法。

前もって感謝します。

51
N Sharma

アニメーションファイルに次の変更を加えます。

enter.xml:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shareInterpolator="false">
    <translate
        Android:duration="500"
        Android:fromXDelta="100%"
        Android:fromYDelta="0%"
        Android:toXDelta="0%"
        Android:toYDelta="0%" />
</set>

exit.xml:

<?xml version="1.0" encoding="utf-8"?>

<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="-100%"
        Android:toYDelta="0%" />
</set>

2番目のアクティビティが右から左にスライドします。

アニメーションのfromXDelta値とtoXDelta値をいじる方法をよりよく理解するために、値の非常に基本的な図を以下に示します。 Activity transition values on X axis

これにより、現在のアクティビティにAndroid:fromXDelta = "0%"およびAndroid:toXDelta = "-100%"を追加した理由を簡単に理解できます。これは、0%から-100%の位置に移動するためです。

[編集]

したがって、ActivityAからActivityBを開きたい場合は、次の操作を行います(ボタンがあるとしましょう)。

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(ActivityA.this, ActivityB.class));
            overridePendingTransition(R.anim.enter, R.anim.exit);
        }
    });

ここで、最初のアニメーションの「後方」アニメーションを作成する場合、アクティビティBを終了するときに、次のように2つの新しいアニメーションファイルとActivityBのonBackPressedメソッドにいくつかのコードが必要になります。

まず、アニメーションファイル:left_to_right.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shareInterpolator="false">
    <translate
        Android:duration="500"
        Android:fromXDelta="-100%"
        Android:fromYDelta="0%"
        Android:toXDelta="0%"
        Android:toYDelta="0%" />
</set>

right_to_left.xml:

<?xml version="1.0" encoding="utf-8"?>
<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="100%"
        Android:toYDelta="0%" />
</set>

また、ActivityBで以下を実行します。

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
}

また、アップナビゲーションを有効にしている場合、この場合もアニメーションを追加する必要があります。

次のようなUPナビゲーションを有効にします。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

そして、これもこの場合のアニメーションの処理方法です。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case Android.R.id.home:
       //NavUtils.navigateUpFromSameTask(this);
       finish();
       overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
       return true;
    }
    return super.onOptionsItemSelected(item);
}

また、コードに問題がない場合でも、携帯電話のアニメーションがオフになっている可能性があることに注意してください。それをオンにするには、次の手順を実行します。

  1. 設定を開き、開発者向けオプションに移動します
  2. 有効になっていることを確認します(右上のトグルボタンをスライドして)
  3. 下にスクロールし、[描画]で、これらのオプションを1つずつタップします。Windowsアニメーションスケール、トランジションアニメーションスケール、アニメーター継続時間スケール
  4. 「アニメーションスケール1x」を選択します

これは役立ちますか?

121
Mike

overridePendingTransitionは、「ターゲット」アクティビティで呼び出す必要があります。例:アクティビティA-> Bから、overridePendingTransition呼び出しをアクティビティBのonCreateに配置します。

ユーザーがシステムレベルでアニメーションを無効にしている場合、アニメーションを強制的に表示することはできません。

編集:

例は次のようになります。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    overridePendingTransition(R.anim.enter, R.anim.exit);
}
7
soundsofpolaris

これは私にとって完璧なコードです

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

Slideinright

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

活動中

Intent intent = new Intent(getApplicationContext(),termcondionactivity.class);
Bundle bndlAnimation = ActivityOptions.makeCustomAnimation(getApplicationContext(), R.anim.slideinleft, R.anim.slideinright).toBundle();

startActivity(intent, bndlAnimation);
1
Maulik Patel

このコードを試してください、それは私のために働いています

右から左にスライドするには

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:fillAfter="true" >
    <translate
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:duration="500"
        Android:fromXDelta="0%"
        Android:toXDelta="-50%" >
    </translate>
</set>

左から右にスライドする

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:duration="500"
    Android:fromXDelta="-50%"
    Android:toXDelta="0%" >
</translate>
1
saranya