example activity android activity-transition shared-element-transition

activity - transition android github



FEATURE_ACTIVITY_TRANSITIONS vs. FEATURE_CONTENT_TRANSITIONS (1)

Me alegro de tener la oportunidad de responder estas preguntas ya que la documentación no está tan clara.

Desde el principio, había un indicador FEATURE_CONTENT_TRANSITIONS que manejaba ambas características. Los dividimos cuando las aplicaciones Material obtuvieron un comportamiento inesperado cuando se habilitó. Por lo tanto, es posible que algunos documentos anteriores sigan indicando que debe habilitar FEATURE_CONTENT_TRANSITIONS para obtener transiciones de actividad cuando signifiquen FEATURE_ACTIVITY_TRANSITIONS .

  1. ¿Cuál es la diferencia entre estas dos banderas? ¿Cuál es la diferencia entre una "transición de actividad" y una "transición de contenido" en este contexto?

Una transición de actividad en este contexto significa que usted llama a startActivity con un paquete creado desde ActivityOptions.makeSceneTransitionAnimation o, su actividad se inició con ese paquete. Las Transiciones de actividad modifican su diseño (por ejemplo, desvanecimiento de elementos, movimiento de elementos compartidos), por lo que si su actividad no le gusta, debe desactivar FEATURE_ACTIVITY_TRANSITIONS .

Las transiciones de contenido usan un TransitionManager cuando llamas a setContentView (que no sea la primera vez). Por lo general, obtendrás un fundido cruzado, pero si el contenido de tu actividad tiene cosas en común, como compartir identificadores o usar transitionName , obtendrás el comportamiento ChangeBounds entre esas vistas. Puede cambiar los detalles de sus transiciones personalizando el TransitionManager asociado a su Ventana, ya sea mediante XML o código.

  1. ¿Por qué está habilitado FEATURE_ACTIVITY_TRANSITIONS y FEATURE_CONTENT_TRANSITIONS deshabilitado de forma predeterminada? ¿Cuándo se requiere realmente el indicador FEATURE_CONTENT_TRANSITIONS ?

FEATURE_CONTENT_TRANSITIONS usa un TransitionManager cuando su contenido cambia. Por defecto, este es un cross-fade y eso fue muy malo para algunas aplicaciones. Por otro lado, FEATURE_ACTIVITY_TRANSITIONS no hace nada en la mayoría de las aplicaciones de forma predeterminada. Tienes que optar por comenzar una actividad de esa manera, por lo que es seguro encenderlo.

  1. ¿Tendría alguna vez sentido inhabilitar FEATURE_ACTIVITY_TRANSITIONS y habilitar FEATURE_CONTENT_TRANSITIONS ? ¿O bien, FEATURE_CONTENT_TRANSITIONS requiere FEATURE_ACTIVITY_TRANSITIONS para habilitarse?

Sí, pero es poco probable. Si su aplicación le gusta FEATURE_CONTENT_TRANSITIONS , debería funcionar bien con FEATURE_ACTIVITY_TRANSITIONS . Si desea limitar explícitamente que las personas llamen a su actividad con elementos compartidos o si no le gusta el efecto de transición de entrada estándar, puede deshabilitarlo para evitar el efecto cuando otra aplicación llame al suyo.

Tengo problemas para entender la diferencia entre estos dos indicadores de Window y no estoy 100% seguro cuando cada uno necesita ser usado y por qué.

Los documentos para Window.FEATURE_ACTIVITY_TRANSITIONS dicen:

Permite que las actividades ejecuten Transiciones de actividad ya sea enviando o recibiendo el paquete ActivityOptions creado con makeSceneTransitionAnimation(Activity, Pair[]) o makeSceneTransitionAnimation(Activity, View, String) .

Y los documentos de Window.FEATURE_CONTENT_TRANSITIONS dicen:

Marcar para solicitar que los cambios en el contenido de la ventana se deben animar usando un TransitionManager .

TransitionManager se establece usando setTransitionManager(TransitionManager) . Si no se establece ninguno, se usará un TransitionManager predeterminado.

La documentación indica que los siguientes métodos de Window requieren que se FEATURE_ACTIVITY_TRANSITIONS indicador FEATURE_ACTIVITY_TRANSITIONS , pero no dice nada acerca de si el FEATURE_CONTENT_TRANSITIONS necesita habilitarse también (tenga en cuenta que de acuerdo con el código fuente , FEATURE_ACTIVITY_TRANSITIONS es true y FEATURE_CONTENT_TRANSITIONS es false para el material- aplicaciones temáticas por defecto):

  • get{Enter,Exit,Return,Reenter}Transition()
  • set{Enter,Exit,Return,Reenter}Transition()
  • getSharedElement{Enter,Exit,Return,Reenter}Transition()
  • setSharedElement{Enter,Exit,Return,Reenter}Transition()
  • getTransitionBackgroundFadeDuration()
  • setTransitionBackgroundFadeDuration()

En otras palabras, parece que en función de esta información, FEATURE_ACTIVITY_TRANSITIONS es el indicador de función que las aplicaciones deberán habilitar para utilizar las nuevas API de transición de actividades de Lollipop. Lo que me confunde, sin embargo, es que este artículo del sitio de Desarrolladores de Android indica que es necesario habilitar FEATURE_CONTENT_TRANSITIONS para implementar transiciones de actividades personalizadas.

Asi que aqui están mis preguntas:

  1. ¿Cuál es la diferencia entre estas dos banderas? ¿Cuál es la diferencia entre una "transición de actividad" y una "transición de contenido" en este contexto?
  2. ¿Por qué está habilitado FEATURE_ACTIVITY_TRANSITIONS y FEATURE_CONTENT_TRANSITIONS deshabilitado de forma predeterminada? ¿Cuándo se requiere realmente el indicador FEATURE_CONTENT_TRANSITIONS ?
  3. ¿Tendría alguna vez sentido inhabilitar FEATURE_ACTIVITY_TRANSITIONS y habilitar FEATURE_CONTENT_TRANSITIONS ? ¿O bien, FEATURE_CONTENT_TRANSITIONS requiere FEATURE_ACTIVITY_TRANSITIONS para habilitarse?

¡Gracias!