私はAndroid Studio 3.2 Canary 14および The Navigation Architecture Component を使用しています。これにより、Intentを使用する場合とほぼ同じように遷移アニメーションを定義できます。
ただし、アニメーションは次のようにナビゲーショングラフのアクションのプロパティとして設定されます。
<fragment
Android:id="@+id/startScreenFragment"
Android:name="com.example.startScreen.StartScreenFragment"
Android:label="fragment_start_screen"
tools:layout="@layout/fragment_start_screen" >
<action
Android:id="@+id/action_startScreenFragment_to_findAddressFragment"
app:destination="@id/findAddressFragment"
app:enterAnim="@animator/slide_in_right"
app:exitAnim="@animator/slide_out_left"
app:popEnterAnim="@animator/slide_in_left"
app:popExitAnim="@animator/slide_out_right"/>
</fragment>
グラフ内のすべてのアクションを定義するのは面倒です!
アクションのデフォルトとしてアニメーションのセットを定義する方法はありますか?
これにスタイルを使用することはできませんでした。
R.anim にはデフォルトのアニメーションが定義されています(最終):
nav_default_enter_anim
nav_default_exit_anim
nav_default_pop_enter_anim
nav_default_pop_exit_anim
この動作を変更するには、カスタム NavOptions を使用する必要があります。
これは、これらのアニメーションが NavAction に割り当てられる場所だからです。
これらを NavOptions.Builder で割り当てることができます。
protected NavOptions getNavOptions() {
NavOptions navOptions = NavOptions.Builder()
.setEnterAnim(R.anim.default_enter_anim)
.setExitAnim(R.anim.default_exit_anim)
.setPopEnterAnim(R.anim.default_pop_enter_anim)
.setPopExitAnim(R.anim.default_pop_exit_anim)
.build();
return navOptions;
}
ほとんどの場合、クラス androidx.navigation.fragment を拡張するDefaultNavFragment
を作成する必要があります(ドキュメントはまだ完成していないようです)。
あるいは...そのパッケージのattrs.xml
を見たとき;これらのアニメーションはスタイル可能です:
<resources>
<declare-styleable name="NavAction">
<attr name="enterAnim" format="reference"/>
<attr name="exitAnim" format="reference"/>
<attr name="popEnterAnim" format="reference"/>
<attr name="popExitAnim" format="reference"/>
...
</declare-styleable>
</resources>
つまり、スタイルを定義することができます-そして、テーマの一部としてこれらを定義します...
styles.xml
で定義できます:
<style name="Theme.Default" parent="Theme.AppCompat.Light.NoActionBar">
<!-- these should be the correct ones -->
<item name="NavAction_enterAnim">@anim/default_enter_anim</item>
<item name="NavAction_exitAnim">@anim/default_exit_anim</item>
<item name="NavAction_popEnterAnim">@anim/default_pop_enter_anim</item>
<item name="NavAction_popExitAnim">@anim/default_pop_exit_anim</item>
</style>
前述のように、R.animにはデフォルトのアニメーションが定義されています:
nav_default_enter_anim
nav_default_exit_anim
nav_default_pop_enter_anim
nav_default_pop_exit_anim
ただし、それらは簡単にオーバーライドできます。
アプリモジュールに同じ名前の独自の4つのアニメーションリソースを作成します(明確にするために、そのうちの1つのIDはyour.package.name.R.anim.nav_default_enter_anim
)好きなアニメーションを書きます。