Android端末で動作するFragmentを使った画面遷移アプリを作成します。「Fragmentによる画面遷移-遷移ボタンの作成」では画面遷移アプリで使用する遷移ボタンを作成し、「Fragmentによる画面遷移-FragmentからActivityへのデータ受け渡し」でFragmentからActivityへ遷移ボタンのデータを受け渡しました。

ここでは、画面遷移時に表示された画面が上下/左右にアニメーションにより遷移する処理を作成します。

  • Android Studio Bumblebee|2021.1.1
  • 開発言語:Java

作成した画面遷移アプリを次に示します。

画面遷移アニメーションの作成

次の手順で画面遷移アニメーションを作成します。

  1. 「ファイル」>「新規」>「Androidリソースファイル」を選択します。
  2. 「新しいリソースファイル」ダイアロの「リソースタイプ」を「アニメーション」に設定します。
  3. 「FragmentTransaction」クラスの「setCustomAnimations」メソッドを使用してアニメーションします。画面遷移のためには、「enter」と「exit」のアニメーションが必要になります。例えば、左から右への画面遷移のアニメーションでは、次のようになります。
  4. left_enter_anim

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:duration="400"
            android:fromXDelta="50%p"
            android:interpolator="@android:anim/decelerate_interpolator"
            android:toXDelta="0" />
        <alpha
            android:duration="400"
            android:fromAlpha="0.0"
            android:toAlpha="1.0" />
    </set>
    

    left_exit_anim

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:duration="400"
            android:fromXDelta="0%p"
            android:interpolator="@android:anim/accelerate_interpolator"
            android:toXDelta="-50%p" />
        <alpha
            android:duration="400"
            android:fromAlpha="1.0"
            android:toAlpha="0.0" />
    </set>
    
  5. プロジェクトに作成したアニメーションを次に示します。

Fragmentの表示画像の作成

次の手順で表示画像を作成します。

  1. 「ファイル」>「新規」>「Androidリソースファイル」を選択します。
  2. 「新しいリソースファイル」ダイアロの「リソースタイプ」を「Drawable」に設定します。
  3. 次のように「drawable」フォルダに画像ファイル「logo.png」が設定されます。

Fragmentに画像の設定

次の手順で、作成したレイアウトに「drawable」フォルダに設定した画像ファイル「logo.png」画像を設定します。

  1. Fragmentによる画面遷移-遷移ボタンの作成」を参照して、Fragment「ScreenFragment1」、レイアウト「fragment_screen1」を新規作成します。
  2. 作成したレイアウト「fragment_screen1」のコンポーネントツリーには「FrameLayout」がすでに設定されています。パレットの「Widgets」から「ImageView」を選択して、コンポーネントツリーに次のようにドラッグします。この「ImageView」に作成したレイアウトに「drawable」フォルダに設定した画像ファイル「logo.png」画像を次のように設定します。
  3. 「共通属性」の「srcCinoat」の右端のボタンをクリックすると次のように表示されるので、「logo」を選択します

アニメーションによる画面遷移

次の手順に従って、Fragment上に作成した遷移ボタンをAndroid端末に表示し、遷移ボタンに従ってアニメーションによる画面を遷移します。

  1. 「activity_main.xml」を開き、パレットの「Layouts」から「FrameLayout」を選択して、コンポーネントツリーに次のようにドラッグします。この「FrameLayout」にFragment「fragment_screen1.xml」上に作成した画像の表示領域を指定します。
  2. 次の処理を追加して、Fragment「ScreenFragment1」で作成した画像をアニメーションで画面遷移します。
    • 6-10行目でFragment「ScreenFragment1」で作成した画像を表示します。
    • 24,27行目等で、「FragmentTransaction」クラスの「setCustomAnimations」メソッドを使用してアニメーションで画面遷移します。

    MainActivity.java

       protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
            setContentView(R.layout.activity_main);
    
            if (savedInstanceState == null) {
                screenfragment1 = new ScreenFragment1();
                screentransaction = getSupportFragmentManager().beginTransaction();
                screentransaction.add(R.id.screen_container, screenfragment1);
                screentransaction.commit();
            }
    
            ・・・
        }
    
        // interface内のメソッドを実装します。
        @Override
        public void onClickDirection(int directionId) {
            screenfragment1 = new ScreenFragment1();
            screentransaction = getSupportFragmentManager().beginTransaction();
    
            switch (directionId) {
                case MainActivity.BTN_UP:
                    screentransaction.setCustomAnimations(R.anim.up_enter_anim, R.anim.up_exit_anim);
                    break;
                case MainActivity.BTN_DOWN:
                    screentransaction.setCustomAnimations(R.anim.down_enter_anim, R.anim.down_exit_anim);
                    break;
                case MainActivity.BTN_LEFT:
                    screentransaction.setCustomAnimations(R.anim.left_enter_anim, R.anim.left_exit_anim);
                    break;
                case MainActivity.BTN_RIGHT:
                    screentransaction.setCustomAnimations(R.anim.right_enter_anim, R.anim.right_exit_anim);
                    break;
            }
            screentransaction.add(R.id.screen_container, screenfragment1);
            screentransaction.commit();
        }