相关疑难解决方法(0)

如何在Navigation Controller中使用共享元素转换

我想在导航到其他片段时使用导航架构组件添加共享元素转换.但我不知道怎么做.在文件中也没有任何关于它的内容.有人能帮我吗?

android navigationcontroller android-architecture-components

31
推荐指数
5
解决办法
9241
查看次数

导航组件共享元素转换适用于输入但不适用于弹出

我正在尝试在 2 个片段 BlankFragment 和 BlankFragment2 之间使用共享元素动画。BlankFragment 有一个回收器视图,而 BlankFragment2 是一个详细信息屏幕。他们共享一张图片,而我正在使用新的导航组件。

在 BlankFragment 中,我正在使用共享图像的转换名称构建FragmentNavigator.Extras附加内容并将其传递给我的调用navigate(因为它是一个回收器视图,并且这些需要是唯一的),

在 BlankFragment2 中,我收到此名称,将其设置为我的图像并设置 setSharedElementEnterTransition

结果是进入动画工作正常但退出/返回没有,我试过设置它们而不是设置它们(因为我相信导航组件应该为我处理这个)有人可以帮忙吗?

MainActivity 导航设置

private void setNavigation() {
    navController = Navigation.findNavController(this, R.id.main_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController);
}
Run Code Online (Sandbox Code Playgroud)

处理后退按钮

@Override
public boolean onSupportNavigateUp() {
    return Navigation.findNavController(this, R.id.main_fragment).navigateUp()
        || super.onSupportNavigateUp();
}
Run Code Online (Sandbox Code Playgroud)

空白片段点击

@Override
public void onClick(View view, int position) {

    NavController navController = Navigation.findNavController(recyclerView);

    FragmentNavigator.Extras extras = new FragmentNavigator.Extras.Builder().addSharedElement(view, view.getTransitionName()).build();

    BlankFragmentDirections.ActionBlankFragmentToBlankFragment2 directions = BlankFragmentDirections.actionBlankFragmentToBlankFragment2(view.getTransitionName());

    navController.navigate(directions,extras);

}
Run Code Online (Sandbox Code Playgroud)

BlankFragment2 onCreate 带有返回/退出转换

@Override
public void onCreate(Bundle savedInstanceState) …
Run Code Online (Sandbox Code Playgroud)

android android-transitions material-design shared-element-transition android-jetpack-navigation

11
推荐指数
1
解决办法
2371
查看次数

NavigationComponent recyclerview 返回共享元素转换

我在项目中使用导航组件。尝试设置来自回收器的共享元素转换。在第二个片段中输入过渡效果很好,但是当我返回到第一个片段时 - 没有返回过渡。

我尝试在第一个片段中显式设置输入和返回转换,就像我在第二个片段中所做的那样

val transition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)

sharedElementEnterTransition = transition

sharedElementReturnTransition = transition
Run Code Online (Sandbox Code Playgroud)

但这没有帮助。

还尝试删除进入和退出片段动画。对于第二个片段,输入过渡适用于动画,但谁知道呢。

还尝试使用此问题的解决方案,但就我而言,它不起作用。 /sf/answers/3704598481/

主片段

stickyAdapter.onItemClick = { event, imageView, textView ->
            val args = bundleOf(EventDetailFragment.EVENT to event)
            val extras = FragmentNavigatorExtras(
                imageView to imageView.transitionName,
                textView to textView.transitionName
            )
            findNavController().navigate(R.id.action_global_eventDetailFragment, args, null, extras)
        }
Run Code Online (Sandbox Code Playgroud)

在适配器 onClick 中,我为视图设置了唯一的转换名称: mainFragmentAdapter

eventImageView.setOnClickListener {
            titleTextView.transitionName = "${event.title}$TRANSITION_TITLE"
            eventImageView.transitionName = "${event.title}$TRANSITION_IMAGE" 
            onItemClick?.invoke(event, eventImageView, titleTextView) 
        }
Run Code Online (Sandbox Code Playgroud)

在detailsFragment中,我从参数中获取转换名称(复制粘贴它们以确保没有错误,并且对于输入转换它有效)我在OnCreate方法中调用推迟EnterTransition()等待,直到我可以在onViewCreated中设置转换名称,sharedElementEnterTransition和sharedElementReturnTransition,然后调用startPostponedEnterTransition()


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        postponeEnterTransition()
    }

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?, …
Run Code Online (Sandbox Code Playgroud)

android shared-element-transition android-recyclerview android-architecture-navigation

3
推荐指数
1
解决办法
2503
查看次数