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