web-dev-qa-db-ja.com

ナビゲーションアクションのデフォルトアニメーションを定義するにはどうすればよいですか?

私は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>

グラフ内のすべてのアクションを定義するのは面倒です!

アクションのデフォルトとしてアニメーションのセットを定義する方法はありますか?

これにスタイルを使用することはできませんでした。

26
Smedegaard

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>
10
Martin Zeitler

前述のように、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)好きなアニメーションを書きます。

0
nbaroz