web-dev-qa-db-fra.com

Comment définir des animations par défaut pour les actions de navigation?

J'utilise Android Studio 3.2 Canary 14 et Le composant d'architecture de navigation . Avec cela, vous pouvez définir des animations de transition à peu près comme vous le feriez avec Intents. 

Mais les animations sont définies comme propriétés des actions dans le graphe de navigation, comme suit:

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

Cela devient fastidieux à définir pour toutes les actions du graphique!

Existe-t-il un moyen de définir un ensemble d'animations par défaut, sur des actions? 

Je n'ai pas eu de chance en utilisant des styles pour cela.

22
Smedegaard

R.anim a les animations par défaut définies (comme final):

  • nav_default_enter_anim

  • nav_default_exit_anim

  • nav_default_pop_enter_anim

  • nav_default_pop_exit_anim

pour changer ce comportement, vous devez utiliser custom NavOptions ,

car c’est là que ces animations sont assignées à un NavAction .

on peut les assigner avec 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;
}

très probablement, il faudrait créer une DefaultNavFragment, qui étend la classe androidx.navigation.fragment (la documentation ne semble pas encore terminée).

alternativement ... quand on regarde le attrs.xml de ce paquet; ces animations sont stylables:

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

cela signifie que l'on peut définir les styles correspondants - et les définir, dans le cadre du thème ...

on peut les définir dans 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>
6
Martin Zeitler

Comme dit, R.anim a les animations par défaut définies:

  • nav_default_enter_anim

  • nav_default_exit_anim

  • nav_default_pop_enter_anim

  • nav_default_pop_exit_anim

Mais vous pouvez facilement les remplacer.

Créez simplement vos quatre ressources animées portant les mêmes noms dans votre module d'application (juste pour préciser, l'identifiant de l'une d'entre elles est your.package.name.R.anim.nav_default_enter_anim) et écrivez quelle animation vous souhaitez.

0
nbaroz