动画 activity 变化为圆形显示

Animate activity change as circular reveal

我尝试使用 android:windowEnterTransition 和 android:windowExitTransition,但这似乎使 activity 中的每个视图都具有动画效果。我怎样才能用上面的内容为整个 activity 制作动画?两个活动之间没有共享元素。

圆形显示是视图动画。跳过 activity 动画,然后在新活动根视图组上执行视图动画。

查看 Lollipop+ AOSP 代码中的 InCallUi 源代码作为示例。

显示动画不适用于 windows。您可以通过定位 window 的内容来模拟它。我这样做了,效果很好:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    ViewGroup viewGroup = (ViewGroup) (findViewById(android.R.id.content).getParent());
    viewGroup.setTransitionGroup(true);
    RevealTransition transition = new RevealTransition();
    transition.addTarget(viewGroup);
    getWindow().setEnterTransition(transition);
}

您必须以 ActivityOptions.makeSceneTransitionAnimation 开始 activity。

一个警告——我实际上不确定在 android.R.id.content 上使用 getParent() 是否合法。我这样做是为了让我的操作栏也成为目标。你应该自己检查一下。我只是在做一个快速测试,看看 reveal 是否有效。

我知道这是一个性能问题,但您可能还想将 window 背景分配给您的内容,以便圆形显示具有硬线。 window 背景颜色淡入。您可以调整淡入淡出持续时间,使其淡入速度不会像显示那样快,但我在测试中没有看到视觉问题——可能是因为颜色我用过。