动画 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 背景颜色淡入。您可以调整淡入淡出持续时间,使其淡入速度不会像显示那样快,但我在测试中没有看到视觉问题——可能是因为颜色我用过。
我尝试使用 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 背景颜色淡入。您可以调整淡入淡出持续时间,使其淡入速度不会像显示那样快,但我在测试中没有看到视觉问题——可能是因为颜色我用过。