在我的应用程序中,我有一个Activity启动另一个带有Fragment的Activity,其中包含一个ViewPager图像。我目前工作的是输入转换,其中第一个Activity启动第二个,转换是正确的。这是有效的,因为在我的ViewPager中我放了一个OnPreDrawListener
,只在加载了寻呼机中的图像时才恢复活动转换。它看起来像这样:
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(及其子视图)在退出过渡期间被销毁。
我已经尝试在父级活动的ActivityCompat.finishAfterTransition(this)
回调中添加onBackPressed
,但它似乎没有任何效果。
答案 0 :(得分:0)
当你在转换过程中有一个ViewPager时,你必须做一些额外的工作才能有一个流畅和“美丽”的过渡。您必须使用postponeTransition()和startPostponedTransition()才能在片段或图像完成加载时播放过渡。 (看来你已经在做了)。我建议您查看下一篇博客:Shared Element Transitions - Part 4: RecyclerView
该文章的目标是更多RecyclerView + ViewAdapter + Fragments转换,但我相信您可以在您的方案中对其进行调整。希望它有所帮助。