18

我整理了一个非常简单的应用程序,它在使用 Dialog 主题(github 上的源代码)启动活动时使用共享元素转换。

我得到以下结果:

示例应用

如您所见,过渡/动画存在两个问题:

  1. 动画仅在对话框活动区域中可见,因此它会剪辑并且看起来很难看。
  2. 当我在活动外部点击返回时,没有过渡/动画。

我该如何解决这些问题?任何帮助,将不胜感激。

编辑:在 Quanturium 的回答之后,我做了以下事情来让它工作:

使用以下主题而不是 Dialog 主题:

<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 作为 Dialog 外观以及圆角和阴影的背景。

调用finishAfterTransition(); 当用户在 CardView 之外点击时。

现在看起来像这样(代码),CardView 需要改进以更好地匹配 Dialog,但它至少可以工作。:

在职的

4

1 回答 1

12

活动转换是这样工作的。当您开始第二个活动时,它会以透明背景显示在第一个活动的顶部。共享元素的定位方式与它们在第一个活动上的位置相同,然后动画到第二个活动上指定的正确位置。

在您的情况下,您使用的是 android:theme="@style/Theme.AppCompat.Dialog" 这意味着第二个活动的绘图区域的大小小于第一个活动的大小。这解释了在外部单击时的剪辑和无过渡。

您要做的是摆脱该主题,并使用深色背景/阴影实现自己的布局,以便能够执行平滑过渡。

于 2015-02-13T20:35:17.537 回答