Как определить анимацию по умолчанию для действий навигации? - PullRequest
0 голосов
/ 23 мая 2018

Я использую Android Studio 3.2 Canary 14 и Компонент архитектуры навигации .При этом вы можете определить анимацию перехода почти так же, как при использовании Intents.

Но анимации задаются как свойства действий на графике навигации, например:

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

Это становится утомительно определять для всех действий на графике!

Есть ли способ определить набор анимаций по умолчанию для действий?

Мне не повезло с использованием стилей для этого.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Как уже было сказано, для R.anim определены анимации по умолчанию:

  • nav_default_enter_anim

  • nav_default_exit_anim

  • nav_default_pop_enter_anim

  • nav_default_pop_exit_anim

Но вы можете легко переопределить их.

Просто создайте свои собственные четыре ресурса анимации сте же имена в модуле приложения (просто чтобы уточнить, идентификатор одного из них your.package.name.R.anim.nav_default_enter_anim) и напишите, какую анимацию вы хотите.

0 голосов
/ 19 сентября 2018

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

, скорее всего, потребуется создать DefaultNavFragment, который расширяет класс androidx.navigation.fragment (документацияпока еще не завершено).

в качестве альтернативы ... при взгляде на 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...