Android片段共享元素转换与隐藏和显示

时间:2015-09-24 11:25:22

标签: java android transitions

我正在尝试使用图像作为共享元素为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>
&#13;
&#13;
&#13;

我也确实使用过android:transitionName =&#34; MyTransition&#34;在boath图像。

以下是添加到style.xml的代码行

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

在RecyclerView中你可以拥有许多id R.id.listImg1 的视图你必须在适配器中设置sharedView setTransitionName programatycally例如你可以使用你的产品ID来创建过渡名称。当您创建第二个详细信息片段时,您可以将包过渡名称传递给该分段。在onCrete中,您可以将图像transitionname设置为与之前相同。

或者您可以创建:

 public interface IRecyclerClikListener {

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

将此侦听器添加到回收站。在视图中,您将参考传递给clikced row。如果您参考了cliked视图,则可以将转换名称设置为图像属于此视图。别忘了在第二个片段中设置相同的转换名称。