当前位置: 首页 > 知识库问答 >
问题:

与CoordinatorLayout和CollapsingToolbarLayout组合时,共享元素转换不起作用

卫皓
2023-03-14
<ImageView
 android:id="@+id/imageView"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:src="@mipmap/ic_launcher"
 android:transitionName="sharedImage" />
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
        holder.mBoundString = mValues.get(position);
        holder.mTextView.setText(mValues.get(position));

        holder.mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Context context = v.getContext();
                Intent intent = new Intent(context, CheeseDetailActivity.class);
                intent.putExtra(CheeseDetailActivity.EXTRA_NAME, holder.mBoundString);

                holder.mImageView.setTransitionName("sharedImage");                        
                ActivityOptionsCompat options = ActivityOptionsCompat.
                        makeSceneTransitionAnimation(
                                getActivity(v.getContext()),
                                            holder.mImageView,                     
                                            "sharedImage");
                ActivityCompat.StartActivity((MyActivity) context, intent, options.toBundle());
            }
        });

        Glide.with(holder.mImageView.getContext())
                .load(Cheeses.getRandomCheeseDrawable())
                .fitCenter()
                .into(holder.mImageView);
    }

如果您运行应用程序,并单击奶酪列表项,您将看到过渡动画如何将图像移动到目标活动视图中不正确(太高)的偏移量。一旦动画完成,图像将出现“扭曲”到正确的位置。

任何关于可能工作的想法都是非常欢迎的。

共有1个答案

步博艺
2023-03-14

答案很简单,cheesesquare activity_detail.xml布局,简而言之,如下所示...

<android.support.design.widget.CoordinatorLayout 
    android:fitsSystemWindows="true"
    ...>

    <android.support.design.widget.AppBarLayout
        android:fitsSystemWindows="true"
        ...>

        <android.support.design.widget.CollapsingToolbarLayout
            android:fitsSystemWindows="true"
            ...>

            <ImageView
                android:fitsSystemWindows="true"
                ... />

            <android.support.v7.widget.Toolbar
                ... />

        </android.support.design.widget.CollapsingToolbarLayout>

     </android.support.design.widget.AppBarLayout>

     <android.support.v4.widget.NestedScrollView
         app:layout_behaviour="@string/appbar_scrolling_view_behaviour"
         ...>

</android.support.design.widget.CoordinatorLayout>

这个布局的问题在于,Android:FitsSystemWindows属性需要沿着布局链向下传播到所有容器,在发布的演示应用程序中,NestedScrollView缺少这个属性。将NestedScrollView修改为

     <android.support.v4.widget.NestedScrollView
         app:layout_behaviour="@string/appbar_scrolling_view_behaviour"
         android:fitsSystemWindows="true"
         ...>

解决了问题。这可能应该在演示Github代码中进行更改。

 类似资料:
  • 我一直在尝试实现这个共享元素转换,并在单击转换时不断出现“java.lang.IllegalArgumentException:共享元素不能为null”错误。请帮忙。 这是下面给出的MainActive onCreate方法。请检查我的代码。 这是recyclerView的onClickListener。 图像的过渡名称相同。这里的bug修复在使用共享元素的活动转换中出现问题并不是问题所在。 我卡

  • 当我使用片段“replace”时,新的共享元素转换可以工作,但我似乎无法使它在片段“add”中工作。我在这两种情况下使用相同的容器。 更多详情: 活动-布局- 在活动启动时,我将Fragment1添加到屏幕上 在Fragment1布局中视图的单击事件上- } 我在两个片段的布局中都有这个图像视图 现在,如果我使用添加第二个片段,但是如果我使用。如何使其与add()一起工作?有可能吗?

  • 我实现的片段如下: 保存父片段的活动。使用getSupportFragmentManager()添加父片段。 在父片段中,我使用getChildFragmentManager()和事务来替换子片段。 我再一次调用儿童片段,以此类推...... 除了共享过渡,一切都很好。 如果我使用getFragmentManager()而不是getChildFragmentManager(),则存在共享转换,但没

  • 我希望采用Glide库来代替通用图像加载器,但在共享元素转换方面遇到了问题。 在我的简单沙盒中,我使用UIL创建了以下过渡:https://dl.dropboxusercontent.com/u/97787025/device-2015-06-18-113333.mp4 非常简单,而且效果很好。但当我使用Glide时,它看起来不太好看:https://dl.dropboxusercontent.c

  • 我正在实现一个gallery应用程序,它有一个片段,其中包含一个带有图像的RecyclerView,单击一个图像,我会转到ViewPager循环浏览图像 目前,我正试图实现像本视频中那样的入门动画。问题是动画不起作用,我显然遗漏了一些东西(只是显示与转换相关的代码): 查看页面: GridAdapter: 在MainActivity中,我在onClick中实例化ViewPagerFragment:

  • 问题内容: 我一直在尝试使用此处的少量指导,使用RecyclerView实现CollapsingToolbar:http : //android-developers.blogspot.co.uk/2015/05/android-design-support- library.html 和项目此处:https : //github.com/chrisbanes/cheesesquare,我目前具有