У меня проблема с общими переходами при использовании Picasso для асинхронной загрузки изображений.Если бы я использовал простой ImageView с отрисовкой, он бы работал нормально.
Однако при использовании Picasso возвращаемая анимация не масштабирует изображение должным образом.
Вы можете лучше увидеть проблему, которую яопишите в моем репозитории github: https://github.com/brunoperezm/SharedTransitionsAsync
Код, который также можно увидеть в моем репо для активности вызова и вызова, выглядит следующим образом:
MainActivity.java
package com.example.sharedtransitionsasync;
import ...
public class MainActivity extends AppCompatActivity {
ImageView imageView;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// getWindow().setSharedElementEnterTransition(new DetailsTransition());
getWindow().setSharedElementReturnTransition(new DetailsTransition());
imageView = findViewById(R.id.my_image_view1);
Picasso.get()
.load("https://i.redd.it/jb1okqafolg21.jpg")
.fit()
.into(imageView, new Callback() {
@Override
public void onSuccess () {
startPostponedEnterTransition();
}
@Override
public void onError (Exception e) {
startPostponedEnterTransition();
}
});
}
public void gotoActivity2 (View view) {
Intent intent = new Intent(this, Main2Activity.class);
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(this, imageView, "profile");
startActivity(intent, optionsCompat.toBundle());
}
public class DetailsTransition extends TransitionSet {
public DetailsTransition() {
setOrdering(ORDERING_TOGETHER);
addTransition(new ChangeBounds()).
addTransition(new ChangeTransform()).
addTransition(new ChangeImageTransform());
}
}
}
Main2Activity.java
package com.example.sharedtransitionsasync;
import ...
public class Main2Activity extends AppCompatActivity {
ImageView imageView;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
getWindow().setSharedElementReturnTransition(new DetailsTransition());
postponeEnterTransition();
imageView = findViewById(R.id.my_image_view2);
Picasso.get()
.load("https://i.redd.it/jb1okqafolg21.jpg")
.fit()
.centerCrop()
.into(imageView, new Callback() {
@Override
public void onSuccess () {
scheduleStartPostponedTransition(imageView);
}
@Override
public void onError (Exception e) {
}
});
}
private void scheduleStartPostponedTransition(final View sharedElement) {
sharedElement.getViewTreeObserver().addOnPreDrawListener(
new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw () {
sharedElement.getViewTreeObserver().removeOnPreDrawListener(this);
startPostponedEnterTransition();
return true;
}
});
}
@Override
public void onBackPressed () {
super.onBackPressed();
supportFinishAfterTransition();
}
public class DetailsTransition extends TransitionSet {
public DetailsTransition() {
setOrdering(ORDERING_TOGETHER);
addTransition(new ChangeBounds()).
addTransition(new ChangeTransform()).
addTransition(new ChangeImageTransform()).
setDuration(5000);
}
}
}