Problema extraño al realizar la transición de ImageView en Android 5.0

Estoy experimentando un problema / error extraño con respecto a las transiciones de ImageView entre Actividades en Android 5.0.

Estoy tratando de hacer una transición de una imagen en miniatura del Fragment A (en la Activity A ) a la imagen del encabezado del Fragment B (en la Activity B ). Funciona bien la mayor parte del tiempo, pero a veces se ensucia hasta tan ligeramente.

Aquí está una imagen de lo que parece cuando se ensucia:

Que desastre... :-)

Naturalmente, se supone que debe llenar todo el área. Ambos ImageViews se establecen en ScaleType.CENTER_CROP , por lo que no puedo imaginar que sea el problema.

Lo curioso es que el problema se soluciona inmediatamente al desplazarse en la Activity B (todo está contenido dentro de un ScrollView subclasificado que cambia el relleno de ImageView al desplazarse).

El código para iniciar la Activity B es bastante sencillo:

 ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation( activity, thumbImageView, "cover"); // "cover" is the shared element name for both ImageViews ActivityCompat.startActivity(activity, intent, options.toBundle()); 

Aquí está el código para el observador ScrollView observable:

 scrollview.setOnScrollChangedListener(new OnScrollChangedListener() { @Override public void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt) { // Such parallax, much wow headerImageView.setPadding(0, (int) (t / 1.5), 0, 0); } }); 

También, aquí es parte de mi estilo de tema:

 <item name="android:windowContentTransitions">true</item> <item name="android:windowAllowEnterTransitionOverlap">true</item> <item name="android:windowAllowReturnTransitionOverlap">true</item> <item name="android:windowSharedElementEnterTransition">@android:transition/move</item> <item name="android:windowSharedElementExitTransition">@android:transition/move</item> 

¿Algunas ideas?

Intente agregar el siguiente código al método onCreateView() su Fragment B:

 getActivity().postponeEnterTransition(); scrollView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { scrollView.getViewTreeObserver().removeOnPreDrawListener(this); getActivity().startPostponedEnterTransition(); return true; } }); 

¿El problema todavía se produce cuando este código está presente? Esto asegurará que la transición sólo comience después de que el fragmento haya terminado su diseño.

Por ejemplo, si está cargando una imagen de alta resolución en su segunda actividad, intente llamar a startPostponedEnterTransition después de startPostponedEnterTransition la imagen (es decir, establecer el oyente onPreDraw en el ImageView lugar De en la vista de la ventana de la decoración).

  • Android L FAB Botón sombra
  • El método setMobileDataEnabled ya no se puede llamar desde Android L y después
  • Elevación en Android Lollipop no funciona
  • Ciertos estilos de ProgressBar no se muestran en Nexus 5 Android 5.0.1
  • FindFragmentById (R.id.map) devuelve null en Android L
  • Desplome nativo de Android desde /system/framework/arm/boot.oat
  • Android Ejecutar otra aplicación durante el bloqueo de tareas
  • Android GridLayout API 21
  • Java.io.IOException: lectura fallida, socket podría cerrarse o tiempo de espera, leer ret: -1 en Android 5.0.1 Lollipop version
  • Colisiones nativas recibidas en dispositivos Samsung sólo con las versiones Lollipop 5.0 y 5.1
  • Cómo personalizar el campo EditText en android utilizando AppCompat v7: 21
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.