Android共享元素到对话框的活动性

Android共享元素到对话框的活动性,android,android-activity,android-dialog,Android,Android Activity,Android Dialog,我有一个活动,在工具栏上有一个图像,一个活动的主题像一个对话框,在大屏幕上有相同的图像。以下是布局文件: my_activity.xml: ... <com.makeramen.roundedimageview.RoundedImageView android:id="@+id/my_image" android:layout_width="40dp" android:layout_height="40dp" android:scaleType="cent

我有一个活动,在工具栏上有一个图像,一个活动的主题像一个对话框,在大屏幕上有相同的图像。以下是布局文件:

my_activity.xml:

...

<com.makeramen.roundedimageview.RoundedImageView
    android:id="@+id/my_image"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:scaleType="centerCrop"
    android:src="@drawable/my_drawable"
    android:transitionName="@string/my_image_transition"
    app:riv_oval="true" />

...
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@id/my_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/my_drawable"
        android:tint="@color/accent"
        android:transitionName="@string/my_image_transition" />

</LinearLayout>
动画确实会发生,但移动的图像仅在对话框区域内可见。因此,您可以看到来自对话框左上角的图像,但看不到它从对话框外的第一个活动移动


下面是一个HTML版本,它应该是什么样子以及它当前的样子:

共享元素动画是在第二个活动中绘制的。使用
主题.AppCompat.Light.Dialog.MinWidth
主题时,第二个活动的窗口大小小于动画的绘图区域

因此,不要使用对话框主题。要更改此设置,请执行以下操作:

<style name="MyDialogActivity" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>

真的
@android:彩色/透明
真的
@空的
真的
第二个活动布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:gravity="center">

<ImageView
        android:id="@id/my_image"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:scaleType="centerCrop"
        android:src="@drawable/your_icon"
        android:transitionName="@string/my_image_transition"/>

那么就是这个效果()

希望能有所帮助

参考资料:


真的
@android:彩色/透明
@空的
真的
真的

以上风格适合我。在manifest.xml中引用此样式。

为什么需要对话框活动?只需将主活动中的图像设置为动画中心,并放置一个白色背景的视图布局,并在动画结束时显示。对话框活动还将包含其他视图,如工具栏。非常感谢!我还用CardView包装了ImageView以获得对话框外观。不起作用的是通过点击外部关闭对话框,但这可以通过使用一些点击监听器来解决。是的,只需在一些布局上添加点击监听器。这很简单。如何设置从第二个活动(它有一些按钮)到第一个活动的回调
<style name="MyDialogActivity" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:gravity="center">

<ImageView
        android:id="@id/my_image"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:scaleType="centerCrop"
        android:src="@drawable/your_icon"
        android:transitionName="@string/my_image_transition"/>
 <style name="dialog_style_activity">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>