ImageView elemento compartido transición (entre Actividad) comienza con scaleType incorrecto

Encontré el problema con SimpleDraweeView de fresco al principio. Sin embargo, el problema sigue existiendo después de reemplazar con ImageView de Android. Así que no puedo estar seguro de si el problema se debe a Android o simplemente fresco.

Cuál es el problema

  1. La primera actividad ha reciclado vista y cada vista tiene un ImageView (o SimpleDraweeView). El scaleType deseado es "centerCrop"
  2. La segunda actividad tiene sólo un ImageView. El scaleType deseado es "fitCenter"

Sin embargo, en mi proyecto privado, y también en el proyecto de muestra.
Https://github.com/JackFan-Z/ActivitySharedElementTransition
El ImageView comienza con scaleType "fitCenter", que es incorrecto.

Traté de posponer la transición de elemento compartido y establecer diferentes scaleType de elemento compartido en las devoluciones de llamada de SharedElementCallback. Pero ninguno de ellos realmente funciona. ¿Podría alguien ayudar a averiguar qué pasa mal, o dónde depurar?

Las capturas de pantalla del problema

La captura de pantalla de la primera Actividad:
Introduzca aquí la descripción de la imagen

La captura de pantalla de la transición:
Introduzca aquí la descripción de la imagen

Como observaste con ImageView esta es una limitación de Android. Sin embargo, estoy haciendo algunos cambios a los tipos de escala de Fresco y será posible hacer esto una vez que presione mis cambios.

En resumen, en lugar de ScaleType ser un Enum (que es muy inflexible), ScaleType se cambia a ser una interfaz que se puede implementar para hacer escala arbitraria. Este cambio ha sido desembarcado internamente y pronto será empujado a GitHub.

Además de lo anterior, estoy trabajando en la implementación de InterpolatingScaleType que sólo interpola entre los dos tipos de escala subyacentes basados ​​en el valor de interpolación (0.0 – 1.0). El valor de 0.0 devuelve la misma transformación que el scaleType1 subyacente, mientras que el valor de 1.0 devuelve la misma transformación que el scaleType2 subyacente. Los valores intermedios son una combinación lineal entre los dos.

InterpolatingScaleType permite intercalar sin problemas entre los dos tipos de escala diferentes que es útil en animaciones como cuando se realiza una transición de vista.

Una vez que esté listo, actualizaré esta respuesta.

EDITAR:

@burzumrus fue lo suficientemente amable para proporcionar una implementación que puedes encontrar aquí en GitHub . También hay un hilo en este tema en la página GitHub del Fresco.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.