弹出窗口的动画效果

3

我正在尝试复制在Chrome浏览器(Android版)中打开溢出菜单时发生的动画效果。这是该动画的视频:

https://www.dropbox.com/s/1f4i1ad9ky1wjth/video.flv?dl=0

因此,为了在此窗口中对ListView项进行动画处理,我在此ListView的adapter的getView()函数中使用以下代码:

<set>
    <translate android:fromYDelta="-5%p" android:toYDelta="0"
        android:duration="700"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
        android:duration="700" />
</set>

但是这种效果与原始的Chrome动画有所不同?我在这里缺少什么?
4个回答

3
这里ListView项发生的实际情况是:
  1. 它们通过 android:fromYDelta="-1%p" to android:toYDelta="0" 进行翻译
  2. 它们的透明度值改变为 android:fromAlpha="0.0" android:toAlpha="1.0"
  3. 最重要的是,使用

    LayoutAnimationController lac = new LayoutAnimationController(AnimationUtils.loadAnimation(MainActivity.this, R.anim.animation), 0.3f);

其中0.3f是延迟时间。

我错过了第三点。 在这里,R.anim.animation是将点1和2组合起来的动画。这是完整的项目。只有Pre-Lollipop设备缺少阴影。

https://github.com/rahulrj/ChromeOverflowMenu


1
如果你将“动画持续时间比例”设置为“10倍”,则可以在开发者选项中看到菜单列表上的项目按顺序进行动画处理...而不是同时进行。
我实际上没有测试过你的代码,但我认为这会使所有项目同时动画...
编辑1:
您可以通过使用setStartDelay来控制每个视图的起始延迟,使用位置作为控制变量进行动画处理(startDelay = position*1000,如果您希望在每个项目之间间隔1秒钟)。

是的,我的代码同时加载它们。我希望它们按顺序加载。我该怎么做? - Diffy
1
你提到了动画持续时间缩放。我尝试通过减慢动画速度来测试它,但这让我找到了适合我的LayoutAnimationController。感谢您的帮助。 - Diffy

1

动画期间发生了两件事情:

1)容器(包含元素,例如列表视图)从0缩放到1,提供正确的枢轴点非常重要,否则动画看起来不像Chrome动画。

2)元素本身正在进行动画处理,它们正在淡入。您可以使用简单的对象动画器或XML动画器来完成此操作。我会选择对象动画器,因为这样您就可以拥有更多的控制权。正如其他人所说,您可以根据位置添加setStartDelay,但是在列表中滚动时可能会导致奇怪的行为。

值得注意的事情: 可能有一些ListView动画库,我建议您去查看它们。您可以在https://android-arsenal.com/找到许多Android库。

另外,当您想要复制某个动画时,请问自己:究竟发生了什么以及我该如何找到这些信息。您可以减慢动画速度,以便更容易看到发生了什么。


我已经观察并尝试动画2天了,然后发布了问题。顺便说一句,我不知道Animator Duration,它帮助我很多地找到了动画。所以我尝试了一下,最终找到了解决方案。 - Diffy

-1

嘿,看看这个:ListView Animations

也许这对你有用。 我还没有检查过你的代码,但我假设这可以为你工作:

<set>
<translate android:fromYDelta="-50%p" android:toYDelta="0"
    android:duration="700"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
    android:duration="700" />


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