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
- Uso de Fresco de Facebook para cargar un mapa de bits
- Picasso v / s Imageloader v / s Fresco vs Glide
- Fresco: Utilice la imagen actual que se muestra en Drawee como marcador de posición para la siguiente solicitud
- ¿Cómo puedo implementar zoom en la Biblioteca Fresco?
- Facebook Fresco usando wrap_content
- La primera actividad ha reciclado vista y cada vista tiene un ImageView (o SimpleDraweeView). El scaleType deseado es "centerCrop"
- 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:
La captura de pantalla de la transición:
- ¿Gradle falló con Facebook SDK, Fresco lib y Retrofit?
- Error: Error de ejecución de la tarea ': app: dexDebug'. Terminado con valor de salida no cero 2 con Facebook Fresco
- Almacenamiento de gifs en fresco
- App fallos aleatorios con señal fatal 7 (SIGBUS), código 2 o señal fatal 11 (SIGSEGV), código 1
- Android 5.0 no es compatible con BitmapFactory.Options inPurgeable
- Circular Progressbar usando Fresco
- ¿Cómo puedo actualizar la imagen de fresco SimpleDraweeView, si se estableció una vez por setImageURI
- ¿Por qué utilizar fresco datasource para obtener mapa de bits está vacío
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.