在活动之间切换:不要隐藏先前的活动

8
这里有一个相当直接的问题,但我似乎找不到已经提出这个问题的人。很可能是我没有使用正确的关键词。
在任何情况下,以下是我的情况:
我正在启动一个新的活动,在其中显示一个Web视图。我调用了overridePendingTransition以获得我在切换到新活动时想要的动画效果,这很好用(至少,动画部分很好用)。然而,有一些事情会减弱效果。
我想要的是将Web视图从底部滑过前一个活动,并且当用户按下返回按钮时,它应该向下滑动并退出视线。第二部分非常完美,但第一部分并不完全符合我的要求。
在立即触发新活动时,旧活动被隐藏了,取而代之的是黑暗,所以看起来Web视图从黑暗中滑过。我希望它离开先前的活动,而不是隐藏它,因此Web视图可以滑过它。这种情况是否可能?
谢谢!
5个回答

11

我来这里是为了寻找同样的东西,但当前的答案没有帮助。希望这可以帮到你,因为这是在问题提出四个月后。

在我看来,这是由于安卓平台中的一个 bug 导致的,因为:

  • 只有当 exitAnim 为 0 时才会发生此问题,
  • 只有在“translate”元素中才会发生,而“alpha”元素(淡入淡出)工作正常。

这是我的解决方法:

@Override
protected void onResume() {
    overridePendingTransition(R.anim.mu_slide_in_left, R.anim.mu_no_anim);
    super.onResume();
}

@Override
protected void onPause() {
    overridePendingTransition(0, R.anim.mu_slide_out_right);
    super.onPause();
}

其中 mu_no_anim.xml 位于何处

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
   android:interpolator="@android:anim/accelerate_interpolator"
   android:fromAlpha="1.0" android:toAlpha="1.0" android:duration="100000" />

这样做是通过指定可靠的透明度机制将传出活动从透明度1渐变为透明度1,从而强制保持其可见性 - 换句话说,只需使其完全可见。

这种解决方法并不完美。例如,如果您从对话框中调用新活动,则当该活动滑入到位时,对话框将看起来已经被关闭 - 但在关闭该活动后,它将重新出现。


2
我有一个类似的问题,是使用overridependingtransition从一个活动滑动到另一个活动时出现黑屏。我按照以下方法进行操作,结果解决了问题:
1)在anim文件夹中创建一个noanim.xml文件。
    <?xml version="1.0" encoding="utf-8"?>

   <translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />

并使用

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

我将第一个参数作为我的原始动画,第二个参数作为退出动画,它是我的虚拟动画。


1

可能会很慢,但您尝试使用不同的主题来进行活动了吗?

请查看this


尝试了很多使用setTheme的方法,但是没有看到任何不同之处。谢谢您提供的链接,我可能会尝试制作自定义主题。 - Droidmon
使用片段而不是活动怎么样?谷歌建议无论如何都要使用它们... - android developer

1

创建自定义的过渡动画XML资源文件,实现所需的效果,并在启动下一个Activity之前调用Activity.overridePendingTransition。


我确实有这些,只是不知道如何在退出动画中说“保持原地和可见”。 - Droidmon
4
好的,这有点儿傻,但我刚刚创建了一个动画,它基本上什么也不做,并且持续时间与webview的动画相同。(我只是将xDelta从0%转换为0%,这意味着显然不去任何地方,但它仍然在后台被绘制而不是变成黑色) - Droidmon
1
这也是我所做的,只是从0到0的转换。安卓有点奇怪哈哈 - trapper

1
与其使用延迟退出动画,您可以向进入的活动主题添加一个属性,使窗口半透明 - 这样您就可以看到之前的活动了。
<style name="EnteringActivity.Theme" parent="@android:style/Theme.Holo.Light">
    [...]
    <item name="android:windowIsTranslucent">true</item>
    [...]
</style>

注意:如果您正在创建对话框活动,则还需要在活动主题上添加以下属性:
<item name="android:windowBackground">@color/transparent</item>

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