繁体   English   中英

Android Fragment通过“隐藏和显示”共享元素过渡

[英]Android Fragment Share Element Transition with Hide and Show

我正在尝试使用图像作为共享元素,为RecyclerView元素进行共享元素转换。

除了共享元素转换,我还可以进行其他转换。

我的猜测是问题出在Transition.hide和transition.Show中。

其他,我坚持。 请帮忙 :)

这是处理过渡的方法

 public void goToProduct(ProductItem current) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Transition changeTransform = TransitionInflater.from(this). inflateTransition(R.transition.change_image_transform); Transition explodeTransform = TransitionInflater.from(this). inflateTransition(android.R.transition.explode); productListFragment.setSharedElementReturnTransition(changeTransform); productListFragment.setExitTransition(explodeTransform); productPageFragment.setSharedElementEnterTransition(changeTransform); productPageFragment.setEnterTransition(explodeTransform); isProductPageOpenedFromCart = false; isProductPageOpenedFromList = false; ImageView listImage = (ImageView) findViewById(R.id.listImg1); ImageView pageImage = (ImageView) findViewById(R.id.pageImg); FragmentTransaction transaction = manager.beginTransaction(); transaction.hide(productListFragment) .addToBackStack("transaction") .addSharedElement(listImage, "MyTransition"); if (isCartOpen) { CartFragment cartFragment = (CartFragment) manager.findFragmentByTag(CART_FRAGMENT_TAG); transaction.remove(cartFragment); isCartOpen = false; isProductPageOpenedFromCart = true; } else { isProductPageOpenedFromList = true; } productPageFragment.setProduct(current); transaction.show(productPageFragment).addToBackStack("transaction") .addSharedElement(pageImage, "MyTransition");; transaction.commit(); } else { 

过渡文件夹文件名为change_image_transform,其中包含:

 <?xml version="1.0" encoding="utf-8"?> <transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> <changeTransform/> <changeImageTransform/> </transitionSet> 

我也确实在boath图像上使用了android:transitionName =“ MyTransition”。

这是添加到style.xml的代码行

 <item name="android:windowContentTransitions">true</item> <item name="android:windowEnterTransition">@transition/change_image_transform</item> <item name="android:windowExitTransition">@transition/change_image_transform</item> <item name="android:windowSharedElementEnterTransition">@transition/change_image_transform</item> <item name="android:windowSharedElementExitTransition">@transition/change_image_transform</item> 

在RecyclerView中,您可能有许多ID为R.id.listImg1的视图。您必须以编程方式在适配器集中设置sharedView setTransitionName ,例如,您可以使用产品ID来创建过渡名称。 并且,当您创建第二个细节片段时,您可以按包转换名称将其传递给该片段。 在onCrete中,您可以将图像的过渡名称设置为与以前相同的名称。

或者您可以创建:

 public interface IRecyclerClikListener {

   public void onItemClik(int pos,Object obj,View view);
 }

将此监听器添加到您的回收站。 对于该视图,您将参考传递给倾斜的行。 如果您引用了喜欢的视图,则可以将过渡名称设置为属于该视图的图像。 不要忘记在第二个片段中设置相同的过渡名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM