与对话框共享元素转换 Activity
Shared element transition with Dialog Activity
我组装了一个非常简单的应用程序,它在启动带有对话框主题 (source code on github) 的 activity 时使用共享元素转换。
我得到以下结果:
如您所见,transition/animation 有两个问题:
- 动画只在对话框区域可见activity所以它被裁剪并且看起来很丑。
- 当我在activity之外点击时没有transition/animation
回去吧
我该如何解决这些问题?任何帮助将不胜感激。
编辑: 在 Quanturium 回答后我做了以下事情让它工作:
使用以下主题而不是对话框主题:
<style name="AppTheme.Transparent" parent="AppTheme">
<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>
使用 CardView 作为对话框外观以及圆角和阴影的背景。
调用 finishAfterTransition();当用户在 CardView 外部点击时。
现在看起来像这样 (code),CardView 需要改进以更好地匹配 Dialog,但它至少可以工作。:
activity 转换是这样工作的。当您启动第二个 activity 时,它会以透明背景显示在您的第一个之上。共享元素的定位方式与它们在第一个 activity 上的位置相同,然后动画到第二个 activity 上指定的正确位置。
在您的情况下,您使用的是 android:theme="@style/Theme.AppCompat.Dialog" 这意味着第二个 activity 的绘图区域的大小小于第一个 activity 中的那个。这解释了在外部单击时的剪裁和无过渡。
你想要做的是摆脱那个主题,并用深色背景/阴影实现你自己的布局,以便能够执行你的平滑过渡。
我组装了一个非常简单的应用程序,它在启动带有对话框主题 (source code on github) 的 activity 时使用共享元素转换。
我得到以下结果:
如您所见,transition/animation 有两个问题:
- 动画只在对话框区域可见activity所以它被裁剪并且看起来很丑。
- 当我在activity之外点击时没有transition/animation 回去吧
我该如何解决这些问题?任何帮助将不胜感激。
编辑: 在 Quanturium 回答后我做了以下事情让它工作:
使用以下主题而不是对话框主题:
<style name="AppTheme.Transparent" parent="AppTheme">
<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>
使用 CardView 作为对话框外观以及圆角和阴影的背景。
调用 finishAfterTransition();当用户在 CardView 外部点击时。
现在看起来像这样 (code),CardView 需要改进以更好地匹配 Dialog,但它至少可以工作。:
activity 转换是这样工作的。当您启动第二个 activity 时,它会以透明背景显示在您的第一个之上。共享元素的定位方式与它们在第一个 activity 上的位置相同,然后动画到第二个 activity 上指定的正确位置。
在您的情况下,您使用的是 android:theme="@style/Theme.AppCompat.Dialog" 这意味着第二个 activity 的绘图区域的大小小于第一个 activity 中的那个。这解释了在外部单击时的剪裁和无过渡。
你想要做的是摆脱那个主题,并用深色背景/阴影实现你自己的布局,以便能够执行你的平滑过渡。