物料容器转换在背压机上不起作用

zxlwwiss  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(487)

我在这里读到了添加到材质设计库中的新运动过渡https://material.io/develop/android/theming/motion. 并想为我的应用程序实现同样的功能。
我的应用程序是电子商务应用程序销售产品。所以,当我通过单击回收器视图中的产品导航到产品详细信息时,我想实现容器转换。我浏览了许多教程,这些教程主要是在kotlin中,然后用在我的java代码中,现在从产品列表过渡到细节工作,但当我单击“上一步”时,它没有显示像“收缩到回收项目”这样的过渡。我不知道我错过了什么。另外,我正在为应用程序使用导航架构组件。
这是我实现的代码
产品列表片段.java

  1. @Override
  2. public void onCreate(@Nullable Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setExitTransition(new Hold());
  5. setReenterTransition(new Hold());
  6. }
  7. @Override
  8. public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
  9. postponeEnterTransition();
  10. ViewGroup viewGroup = (ViewGroup) view.getParent();
  11. viewGroup
  12. .getViewTreeObserver()
  13. .addOnPreDrawListener(() -> {
  14. startPostponedEnterTransition();
  15. return true;
  16. });
  17. super.onViewCreated(view, savedInstanceState);
  18. }

产品适配器.java

  1. public void onProductClick(View view) {
  2. FragmentNavigator.Extras.Builder extras = new FragmentNavigator.Extras.Builder();
  3. binding.container.setTransitionName(products.get(position).getProductId());
  4. extras.addSharedElement(binding.container,binding.container.getTransitionName());
  5. FragmentNavigator.Extras build = extras.build();
  6. NavController navController = Navigation.findNavController(activity, R.id.nav_host_fragment);
  7. navController.navigate(ProductListDirections.actionNavHomeToNavProductDetails(products.get(position).getProductId()),build);
  8. }

产品详细信息.java

  1. @Override
  2. public void onCreate(@Nullable Bundle savedInstanceState) {
  3. MaterialContainerTransform transform = new MaterialContainerTransform();
  4. transform.setDuration(300);
  5. transform.setFadeMode(MaterialContainerTransform.FADE_MODE_CROSS);
  6. transform.setElevationShadowEnabled(true);
  7. transform.setScrimColor(Color.TRANSPARENT);
  8. transform.setContainerColor(Color.WHITE);
  9. //transform.setAllContainerColors(R.attr.color);
  10. postponeEnterTransition();
  11. setSharedElementEnterTransition(transform);
  12. super.onCreate(savedInstanceState);
  13. }
  14. @Override
  15. public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
  16. super.onViewCreated(view, savedInstanceState);
  17. binding.detailsContainer.setTransitionName(ProductDetailsFragmentArgs.fromBundle(getArguments()).getProductId());
  18. }
  19. @Override
  20. public void onActivityCreated(@Nullable Bundle savedInstanceState) {
  21. super.onActivityCreated(savedInstanceState);
  22. mViewModel.observeProductDetails().observe(getViewLifecycleOwner(), new Observer<ProductDetails>() {
  23. @Override
  24. public void onChanged(ProductDetails productDetails) {
  25. startPostponedEnterTransition();
  26. }
  27. });
  28. }

我遗漏了什么吗?请帮帮我。

u0sqgete

u0sqgete1#

当谈到android转换时,我仍然是一只蚱蜢,但我确实看到了chris banes的一篇文章,上面说如果你使用fragmentmanager,你需要添加一个

  1. .setReorderingAllowed(true)

在片段事务开始时,如果要推迟转换。
希望这能把你引向正确的方向。。。

相关问题