【问题标题】:Android Fragment Share Element Transition with Hide and Show带有隐藏和显示的 Android 片段共享元素过渡
【发布时间】:2015-09-24 11:25:21
【问题描述】:

我正在尝试为 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>

我也确实在船图像上使用了 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>

【问题讨论】:

    标签: java android transitions


    【解决方案1】:

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

    或者你可以创建:

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

    将此侦听器添加到您的回收站。您将引用传递给已单击的行的视图。如果您引用了单击视图,则可以将转换名称设置为属于该视图的图像。不要忘记在第二个片段中设置相同的过渡名称。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多