android - programacion - ¿Cómo defino animaciones por defecto para acciones de navegación?
manual de programacion android pdf (2)
Como se dijo, R.anim tiene definidas las animaciones por defecto:
nav_default_enter_anim
nav_default_exit_anim
nav_default_pop_enter_anim
nav_default_pop_exit_anim
Pero puedes anularlos fácilmente.
Simplemente cree sus propios cuatro recursos de animación con los mismos nombres en el módulo de su aplicación (solo para aclarar, la identificación de uno de ellos es your.package.name.R.anim.nav_default_enter_anim
) y escriba la animación que desea.
Estoy usando Android Studio 3.2 Canary 14 y The Navigation Architecture Component . Con esto puedes definir animaciones de transición como lo harías al usar Intents.
Pero las animaciones se establecen como propiedades de las acciones en el gráfico de navegación, así:
<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>
¡Esto se vuelve tedioso de definir para todas las acciones en el gráfico!
¿Hay una manera de definir un conjunto de animaciones por defecto, en acciones?
No he tenido suerte usando estilos para esto.
R.anim tiene las animaciones por defecto definidas (como finales):
nav_default_enter_anim
nav_default_exit_anim
nav_default_pop_enter_anim
nav_default_pop_exit_anim
para cambiar este comportamiento, tendría que usar NavOptions personalizadas,
porque aquí es donde esas animaciones se asignan a NavAction .
uno puede asignar estos con 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;
}
lo más probable es que uno necesite crear un DefaultNavFragment
, que amplíe la clase androidx.navigation.fragment (la documentación no parece estar completa aún).
alternativamente ... al mirar el attrs.xml
de ese paquete; estas animaciones son capaces de estilo
<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>
esto significa que uno puede definir los estilos correspondientes y definirlos como parte del tema ...
Uno puede definirlos en 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>