jon*_*ida 8 android android-viewpager shared-element-transition
在我的应用程序中,我有一个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);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
除了ImageView之外,我还有一个FrameLayout,它也是一个共享元素,但是我用它onCreateView
在片段中的转换名称来标记它.
有了这个,输入过渡对我来说很有效.但是,当我按下后退按钮时,FrameLayout的退出转换正常工作,但ViewPager图像变为空白.
我的猜测是片段的生命周期导致ViewPager(及其子视图)在退出转换期间被销毁.
我已经尝试添加父Activity ActivityCompat.finishAfterTransition(this)
的onBackPressed
回调,但似乎没有任何效果.
当 ViewPager 处于转换过程中时,您必须做一些额外的工作才能获得流畅且“美观”的转换。您必须使用推迟Transition() 和 startPostponedTransition() 以便仅在片段或图像完成加载时播放过渡。(看来你已经在这样做了)。我建议您查看下一篇博客:共享元素转换 - 第 4 部分:RecyclerView
\n\n该文章的目标是更多 RecyclerView + ViewAdapter + Fragments 转换,但我\xc2\xb4m 确信你可以在你的场景中调整它。希望能帮助到你。
\n 归档时间: |
|
查看次数: |
581 次 |
最近记录: |