android - 如何在对话框 fragment 中使用共享元素转换

标签 android android-architecture-navigation shared-element-transition

我正在使用导航组件。我想从 fragment 中的 RecyclerView 将 ImageView 动画化为 DialogFragment。

sdvPhoto.setOnClickListener(view -> {

                    Bundle args = new Bundle();
                    args.putString("ImageFilePath", image.getAbsolutePath());
                    args.putString("transition_name", "photo_" + getAdapterPosition());

                    ViewCompat.setTransitionName(sdvPhoto, "photo_" + getAdapterPosition());

                    DialogFragmentNavigator.Extras extras = new FragmentNavigator.Extras.Builder()
                            .addSharedElement(sdvPhoto, "photo_" + getAdapterPosition())
                            .build();

                    Navigation.findNavController(parentFragment.getView()).navigate(R.id.action_chatFragment_to_imageViewFragment, args, null, extras);
                });

然后在 DialogFragment 中我执行此操作...

    @Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    baseViewFragmentImageView = inflater.inflate(R.layout.fragment_image_view, container, false);
    unbinder = ButterKnife.bind(this, baseViewFragmentImageView);
    getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    if (bundle != null) {
        iv.setPhotoUri(Uri.fromFile(new File(bundle.getString("ImageFilePath"))));
        iv.setTransitionName(bundle.getString("transition_name"));
        ViewCompat.setTransitionName(iv, bundle.getString("transition_name"));
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        TransitionSet transitionSet = new TransitionSet();
        transitionSet.addTransition(new ChangeBounds());
        transitionSet.addTarget(iv);
        getDialog().getWindow().setSharedElementEnterTransition(transitionSet);
        this.setSharedElementReturnTransition(new ImageTransition());
    }
    return baseViewFragmentImageView;
}

这适用于 fragment 到 fragment ,但我不想使用 DialogFragment 来做到这一点。

最佳答案

DialogFragment 不支持共享元素转换,因为 Fragment 共享元素转换仅在同一窗口内转换(相对于对话框,它们是一个单独的窗口)。不幸的是,导航并没有改变这一事实。

关于android - 如何在对话框 fragment 中使用共享元素转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59061285/

相关文章:

Android 共享元素动画对我不起作用

java - 如何从 Android 应用程序中的另一个类调用非静态方法

android - android 中动画后的监听器不起作用

java - DialogFragment 在 Android 4.4.2 中顶部有蓝线

android - 具有 viewpager 性能问题的导航组件

android - Lollipop 中的 Activity 和 Fragment 过渡

android - Fragments 的 onActivityReenter 生命周期方法

java - 如何在android wear中实现手势识别

java - 如何将 Android Navigation Architecture fragment 动画化为滑过旧 fragment ?

多模块应用中的Android导航组件和BottomNavigationView