在我的应用程序中,我有一个Activity启动另一个包含图片ViewPager的Fragment的Activity。目前,我已经实现了进入转换,当第一个Activity启动第二个Activity时,过渡是正确的。这个工作是因为,在我的ViewPager中,我放置了一个OnPreDrawListener
,仅当pager中的图像加载完毕时才恢复activity的转换。代码如下:
public class ImagePagerAdapter extends PagerAdapter {
// Constructor and other things..
@Override
public Object instantiateItem(ViewGroup container, final int position) {
ImageView imageView;
if (position == 0) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// Shared element is the first one.
ViewCompat.setTransitionName(imageView, "sharedImage");
}
}
imageView = new ImageView(activity);
// Just a reusable static Helper class.
HelperPicasso.loadImage(images.get(position), imageView, false, new Callback() {
@Override
public void onSuccess() {
imageView.getViewTreeObserver()
.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
imageView.getViewTreeObserver()
.removeOnPreDrawListener(this);
// When the ImageView is ready to be drawn, we can continue our activity/fragment's postponed transition animation.
// Why? Because we want have the first image be the shared element, and we can only set it after instantiation.
ActivityCompat.startPostponedEnterTransition(activity);
return true;
}
});
}
@Override
public void onError() {
ActivityCompat.startPostponedEnterTransition(activity);
}
});
}
}
除了ImageView,我还有一个FrameLayout,它也是一个共享元素,但我在片段的
onCreateView
中用它的过渡名称标记它。这样,进入转换对我很有效。然而,当我按返回按钮时,FrameLayout的退出转换正常工作,但ViewPager图像变空白。
我的猜测是片段的生命周期导致ViewPager(及其子视图)在退出转换期间被销毁。
我尝试在父活动的
onBackPressed
回调中添加ActivityCompat.finishAfterTransition(this)
,但似乎没有任何影响。