SharedElement过渡在返回时留下白色图像(使用导航)

问题描述 投票:0回答:1

我有一个RecyclerView(包含在ViewPager中),其中包含图像,当用户单击图像时,我希望以共享元素转换全屏显示它们。我已经成功实现了两个片段之间的共享元素过渡,但是当我单击返回时,单击的ImageView是白色的。

在我的onBindViewHolder方法中,我具有:

 holder.picturePost.setOnClickListener(v -> {
                NavDirections action = ProfileFragmentDirections.viewPostDetails(post);
                v.setTransitionName(post);
                FragmentNavigator.Extras extras = new FragmentNavigator.Extras.Builder().addSharedElement(v, post).build();
                Navigation.findNavController(v).navigate(action, extras);
            });

我的目标片段是OpenPostFragment:

public class OpenPostFragment extends Fragment {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        postponeEnterTransition();
        setSharedElementEnterTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.move));
        setSharedElementReturnTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.move));
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.post_card_fragment, container, false);
        Bundle args = getArguments();
        if (args != null) {
            ImageView picturePost = root.findViewById(R.id.picturePost);
            String imagePath = args.getString("imagePath");
            picturePost.setTransitionName(imagePath);
            Glide.with(picturePost)
                    .load(imagePath)
                    .dontTransform()
                    .listener(new RequestListener<Drawable>() {
                        @Override
                        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                            startPostponedEnterTransition();
                            return false;
                        }

                        @Override
                        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                            startPostponedEnterTransition();
                            return false;
                        }
                    })
                    .into(picturePost);
        }
        return root;
    }
}
android androidx android-navigation android-transitions shared-element-transition
1个回答
0
投票

我终于解决了我的问题。我的RecyclerView在ViewPager中的事实引起了麻烦。为了解决我的问题,我必须在初始化ViewPager的片段中添加以下代码:

postponeEnterTransition();
ViewTreeObserver.OnPreDrawListener onPreDrawListener = new ViewTreeObserver.OnPreDrawListener() {
     @Override
     public boolean onPreDraw() {
           mPager.getViewTreeObserver().removeOnPreDrawListener(this);
           startPostponedEnterTransition();
           return true;
     }
};
mPager.getViewTreeObserver().addOnPreDrawListener(onPreDrawListener);
© www.soinside.com 2019 - 2024. All rights reserved.