es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

algunas vistas fragmentadas no animadas con transiciones

Quiero implementar una animación de alternancia de Fragment mediante el uso del método setEnterTransition.

La vista del Fragment es así:

<relativelayout app:layout_behavior="@string/appbar_scrolling_view_behavior" android:gravity="center_horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/id_rl_root">

<view android:id="@+id/view_stub_animation" android:layout_width="match_parent" android:background="#ccffee" android:layout_height="30dp">
</view>
<framelayout android:layout_margintop="30dp" android:id="@+id/index_container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
</framelayout>

Las vistas en index Container se generan dinámicamente. Y la página se ve así:

Ver imagen

Y agrego la enterTransition en el método onCreate de BaseFragment.

val inflater = TransitionInflater.from(requireContext())
enterTransition = inflater.inflateTransition(R.transition.slide_right)

Cuando ingreso al fragmento, solo la vista de animation realiza la animación, mientras que el index_container sale directamente.

No quiero usar setCustomAnimate porque cuando hago la animación, la presentación de la página no es lo suficientemente fluida.

Qué locura. Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para implementar una animación de alternancia de Fragment utilizando el método setEnterTransition, puedes seguir estos pasos:

    1. Define la animación de transición de entrada en un archivo de recursos de transición, por ejemplo, slide_right.xml:


    2. En el método onCreate del BaseFragment, infla la animación de transición de entrada desde el archivo de recursos y configúrala como la transición de entrada:

      val inflater = TransitionInflater.from(requireContext())
      enterTransition = inflater.inflateTransition(R.transition.slide_right)
      

    3. Para aplicar la animación de transición de entrada tanto a las vistas view_stub_animation como a index_container, puedes envolver ambas en un diseño principal y aplicar la transición de entrada a este diseño:
      <RelativeLayout
          app:layout_behavior="@string/appbar_scrolling_view_behavior"
          android:gravity="center_horizontal"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:id="@+id/id_rl_root">
      
          <LinearLayout
              android:id="@+id/container_layout"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              android:clipChildren="false">
      
              <View
                  android:id="@+id/view_stub_animation"
                  android:layout_width="match_parent"
                  android:background="#ccffee"
                  android:layout_height="30dp">
              </View>
      
              <FrameLayout
                  android:layout_marginTop="30dp"
                  android:id="@+id/index_container"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical">
              </FrameLayout>
      
          </LinearLayout>
      
      </RelativeLayout>
      
    4. Para asegurarte de que la animación de transición sea fluida, asegúrate de que las vistas dentro de index_container no sean demasiado pesadas o complejas. Por ejemplo, puedes precargar cualquier dato o vista necesario antes de entrar en el Fragment para disminuir el tiempo de carga.

    Con estos pasos, la animación de transición de entrada debería aplicarse tanto a las vistas view_stub_animation como a index_container cuando se entra en el Fragment.

Comments are closed.