Android共享元素到对话框的活动性
我有一个活动,在工具栏上有一个图像,一个活动的主题像一个对话框,在大屏幕上有相同的图像。以下是布局文件: my_activity.xml: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
...
<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>