共享元素过渡与对话框活动

18

我制作了一个非常简单的应用程序,当使用对话框主题启动活动时,它使用共享元素过渡 (在github上的源代码)。

我得到了以下结果:

示例应用

正如您所看到的,过渡/动画存在两个问题:

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

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

编辑: 根据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作为对话框的背景,以实现圆角和阴影效果。

当用户点击CardView之外的区域时,请调用finishAfterTransition();

现在它看起来像这样(代码),CardView需要进行优化以更好地匹配对话框,但至少它已经可以使用了:

working


这个链接提供了一个关于如何在Android中创建具有透明背景的活动的问题和答案。希望对你有帮助。 - boiledwater
谢谢你的 Github 仓库!!它救了我的命 :) - Seven
1个回答

12

活动转换的工作方式如下。当您启动第二个活动时,它会显示在第一个活动的顶部,并带有透明背景。共享元素以与第一个活动相同的方式定位,然后按照第二个活动指定的正确位置进行动画处理。

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

您想要做的是摆脱该主题,并使用具有黑色背景/阴影的自己的布局,以便能够执行平滑的转换。


这更像是一个解决方法,但我会尝试一下。 - Longi
好的,这个方法可行,我会编辑问题并提供详细的操作说明。 - Longi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接