我一直在使用ActivityOptionsCompat.makeSceneTransitionAnimation()ActivityCompat.startActivityForResult()和以下一些XML代码在应用程序中使用共享元素转换:

...

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:transitionName="@string/transition_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="16sp"
    android:paddingBottom="16sp">

    ...

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

...


这里的一切都很好。

但是,由于我多次使用CardView内部的内容,因此我决定将其移动到新布局并使用<include>对其进行引用。

这是新的布局文件:

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    ...

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


和旧文件:

...

<include layout="@layout/my_card_content"
    android:transitionName="@string/transition_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="16sp"
    android:paddingBottom="16sp" />

...


现在,由于某种原因,共享元素过渡似乎不起作用。

我应该如何解决这个问题?

最佳答案

原来的问题是因为我需要在布局中包含android:transitionName与我的卡片,以便我的卡片布局看起来像这样:

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:transitionName="@string/transition_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    ...

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


意味着在我的<include>标记中不需要它:

<include layout="@layout/my_card_content"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="16sp"
    android:paddingBottom="16sp" />

10-06 11:28