Transición de elementos compartidos y Fresco no funcionan correctamente

Tengo dos Actividades, las cuales contienen una imagen. Estoy usando Fresco para cargar la imagen en una actividad y Picasso para cargar la imagen en otra actividad. Aquí están las partes relevantes de mi código:

Imagen en la primera actividad

<com.facebook.drawee.view.SimpleDraweeView android:id="@+id/imageView102" android:transitionName="image" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginLeft="9dp" android:layout_marginRight="9dp" android:layout_marginTop="10dp" fresco:actualImageScaleType="centerCrop" fresco:placeholderImage="@color/wait_color" fresco:placeholderImageScaleType="fitCenter" fresco:viewAspectRatio="1.33" android:layout_marginBottom="10dp" /> 

Imagen en segunda actividad

 <uk.co.senab.photoview.PhotoView android:id="@+id/zoomable" android:transitionName="image" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerInParent="true" /> 

Estoy usando PhotoView en la segunda actividad para acercar y alejar la imagen.

Primera Actividad

 Uri uri = Uri.parse(photoUrl); ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri) .setProgressiveRenderingEnabled(true) .build(); DraweeController controller = Fresco.newDraweeControllerBuilder() .setImageRequest(request) .setOldController(image.getController()) .build(); image.setController(controller); image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(ImageActivity.this, AlternateFullImageActivity.class); intent.putExtra("ID", photoId); intent.putExtra("photoUrl", photoUrl); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { ActivityOptionsCompat options = ActivityOptionsCompat. makeSceneTransitionAnimation(ImageActivity.this, (View)image, "image"); startActivity(intent, options.toBundle()); } else { startActivity(intent); } } }); 

Segunda actividad

 Intent intent = getIntent(); photoId = intent.getExtras().getString("ID"); photoUrl = intent.getExtras().getString("photoUrl"); Picasso.with(AlternateFullImageActivity.this) .load(photoUrl) .into(image); mAttacher = new PhotoViewAttacher(image); 

El problema es que la transición no es suave y muy rápida. He leído aquí que necesito cambiar la transición a ChangeBounds . ¿Cómo cambio la transición a eso y cómo agrego la duración a esta transición como decir, 1000ms?

Puede crear una clase que extienda TransitionSet para especificar las transiciones, como ChangeBounds. Por ejemplo…

 @TargetApi(Build.VERSION_CODES.LOLLIPOP) public class DetailTransition extends TransitionSet { public DetailsTransition(int duration, int delay) { setOrdering(ORDERING_TOGETHER); addTransition(new ChangeBounds()). addTransition(new ChangeTransform()). addTransition(new ChangeImageTransform()).setDuration(duration).setStartDelay(delay).setInterpolator(new AnticipateOvershootInterpolator()); } } 

Y luego establece la transición de elemento compartido en su fragmento o actividad / ventana. Para fragmentos como este

 currentFragment.setSharedElementEnterTransition(new DetailsTransition(1000, 400)); 

O para actividades como esta

 getWindow().setSharedElementEnterTransition(new DetailsTransition(1000, 400)); 

En las nuevas versiones de Fresco hay una transición personalizada para hacerlo fácilmente.

Mira este ejemplo en su propio repositorio:

https://github.com/facebook/fresco/tree/master/samples/transition

Básicamente, debe llamar a setSharedElementEnterTransition() con la transición correspondiente en la actividad de apertura :

 getWindow().setSharedElementEnterTransition(DraweeTransition.createTransitionSet(ScalingUtils.ScaleType.CENTER_CROP,ScalingUtils.ScaleType.FIT_CENTER)); getWindow().setSharedElementReturnTransition(DraweeTransition.createTransitionSet(ScalingUtils.ScaleType.FIT_CENTER,ScalingUtils.ScaleType.CENTER_CROP)); 
  • FragmentTransaction.replace () transición de fade-in muestra el fragmento "fantasma"
  • Transición personalizada de elementos compartidos en la actividad final
  • ¿Crear una transición Fragment como la aplicación Contactos?
  • Imagen de diapositiva suave de una sola manera
  • Transición de página de paginación personalizada
  • Transiciones de elementos compartidos entre vistas (no actividades o fragmentos)
  • Elemento de transición Elemento compartido de TextView a EditText
  • La transición de entrada en un fragmento con un elemento compartido se dirige al elemento compartido
  • Elemento compartido de animación de transición de elemento
  • Marco de transición de Android y datos de la red
  • Cómo implementar fragmento resizableable por arrastre de usuario (no animación de transición predefinida)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.