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

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

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

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setExitTransition(new Hold());
    setReenterTransition(new Hold());
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {

    postponeEnterTransition();
    ViewGroup viewGroup = (ViewGroup) view.getParent();
    viewGroup
            .getViewTreeObserver()
            .addOnPreDrawListener(() -> {
                startPostponedEnterTransition();
                return true;
            });
    super.onViewCreated(view, savedInstanceState);
}

产品适配器.java

public void onProductClick(View view) {
        FragmentNavigator.Extras.Builder extras = new FragmentNavigator.Extras.Builder();
        binding.container.setTransitionName(products.get(position).getProductId());
        extras.addSharedElement(binding.container,binding.container.getTransitionName());
        FragmentNavigator.Extras build = extras.build();

        NavController navController = Navigation.findNavController(activity, R.id.nav_host_fragment);
        navController.navigate(ProductListDirections.actionNavHomeToNavProductDetails(products.get(position).getProductId()),build);
    }

产品详细信息.java

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {

    MaterialContainerTransform transform = new MaterialContainerTransform();
    transform.setDuration(300);
    transform.setFadeMode(MaterialContainerTransform.FADE_MODE_CROSS);
    transform.setElevationShadowEnabled(true);
    transform.setScrimColor(Color.TRANSPARENT);
    transform.setContainerColor(Color.WHITE);
    //transform.setAllContainerColors(R.attr.color);
    postponeEnterTransition();
    setSharedElementEnterTransition(transform);
    super.onCreate(savedInstanceState);
}

 @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    binding.detailsContainer.setTransitionName(ProductDetailsFragmentArgs.fromBundle(getArguments()).getProductId());

}

 @Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
 mViewModel.observeProductDetails().observe(getViewLifecycleOwner(), new Observer<ProductDetails>() {
        @Override
        public void onChanged(ProductDetails productDetails) {

            startPostponedEnterTransition();
        }
    });
}

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

u0sqgete

u0sqgete1#

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

.setReorderingAllowed(true)

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

相关问题