我在这里读到了添加到材质设计库中的新运动过渡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();
}
});
}
我遗漏了什么吗?请帮帮我。
1条答案
按热度按时间u0sqgete1#
当谈到android转换时,我仍然是一只蚱蜢,但我确实看到了chris banes的一篇文章,上面说如果你使用fragmentmanager,你需要添加一个
在片段事务开始时,如果要推迟转换。
希望这能把你引向正确的方向。。。