Android端末で動作するFragmentを使った画面遷移アプリを作成します。「Fragmentによる画面遷移-遷移ボタンの作成」では画面遷移アプリで使用する遷移ボタンを作成し、「Fragmentによる画面遷移-FragmentからActivityへのデータ受け渡し」でFragmentからActivityへ遷移ボタンのデータを受け渡しました。
ここでは、画面遷移時に表示された画面が上下/左右にアニメーションにより遷移する処理を作成します。
- Android Studio Bumblebee|2021.1.1
- 開発言語:Java
作成した画面遷移アプリを次に示します。
画面遷移アニメーションの作成
次の手順で画面遷移アニメーションを作成します。
- 「ファイル」>「新規」>「Androidリソースファイル」を選択します。
- 「新しいリソースファイル」ダイアロの「リソースタイプ」を「アニメーション」に設定します。
- 「FragmentTransaction」クラスの「setCustomAnimations」メソッドを使用してアニメーションします。画面遷移のためには、「enter」と「exit」のアニメーションが必要になります。例えば、左から右への画面遷移のアニメーションでは、次のようになります。
- プロジェクトに作成したアニメーションを次に示します。
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>
Fragmentの表示画像の作成
次の手順で表示画像を作成します。
- 「ファイル」>「新規」>「Androidリソースファイル」を選択します。
- 「新しいリソースファイル」ダイアロの「リソースタイプ」を「Drawable」に設定します。
次のように「drawable」フォルダに画像ファイル「logo.png」が設定されます。
Fragmentに画像の設定
次の手順で、作成したレイアウトに「drawable」フォルダに設定した画像ファイル「logo.png」画像を設定します。
- 「Fragmentによる画面遷移-遷移ボタンの作成」を参照して、Fragment「ScreenFragment1」、レイアウト「fragment_screen1」を新規作成します。
- 作成したレイアウト「fragment_screen1」のコンポーネントツリーには「FrameLayout」がすでに設定されています。パレットの「Widgets」から「ImageView」を選択して、コンポーネントツリーに次のようにドラッグします。この「ImageView」に作成したレイアウトに「drawable」フォルダに設定した画像ファイル「logo.png」画像を次のように設定します。
「共通属性」の「srcCinoat」の右端のボタンをクリックすると次のように表示されるので、「logo」を選択します
アニメーションによる画面遷移
次の手順に従って、Fragment上に作成した遷移ボタンをAndroid端末に表示し、遷移ボタンに従ってアニメーションによる画面を遷移します。
- 「activity_main.xml」を開き、パレットの「Layouts」から「FrameLayout」を選択して、コンポーネントツリーに次のようにドラッグします。この「FrameLayout」にFragment「fragment_screen1.xml」上に作成した画像の表示領域を指定します。
- 次の処理を追加して、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();
}








