Android - AnimatorSet、Object Animator - 弹跳动画链正在合并?

标签 android animation

我有一个关于 Android 中的 ObjectAnimator 的问题。我正在尝试模拟一个弹跳效果,其中 View 向上滑动(减小 Y 值)并在相同数量“n”之后返回,然后 View 再次向上和向下滑动,但这次是“n/2”(所以距离的一半)。

所以弹跳幅度更大,然后弹跳幅度更小 - 即,当 Mac 图标需要您注意时,它会在托盘中执行类似的操作。

这是我到目前为止尝试过的(假设 v 是一个 View):

float y = v.getTranslationY(),distance = 20F;

                AnimatorSet s = new AnimatorSet();
                s.play(ObjectAnimator.ofFloat(v, "translationY", y- distance).setDuration(500))
                .before(ObjectAnimator.ofFloat(v, "translationY", y).setDuration(500))
                .before(ObjectAnimator.ofFloat(v, "translationY", y- (distance/2)).setDuration(500))
                .before(ObjectAnimator.ofFloat(v, "translationY", y).setDuration(500));
                s.start();

忽略代码质量,这是一个 POC!我希望这会奏效,但它似乎只“弹跳”一次,就好像它结合了动画,尽管使用了 .before()

你能告诉我如何创建复杂的 AnimatorSet 链,这些链不会合并为一个,因为我似乎遗漏了什么?

奖励:为了加分,如何设置 AnimatorSet 的重复?

非常感谢!

最佳答案

好吧,所以我最终找到了一种相当简洁的方法来实现顺序动画,方法是忽略流畅的构建器,只使用 playSequentially() 方法,这样:

AnimatorSet as = new AnimatorSet();
as.playSequentially(ObjectAnimator.ofFloat(...), // anim 1
                    ObjectAnimator.ofFloat(...), // anim 2
                    ObjectAnimator.ofFloat(...), // anim 3
                    ObjectAnimator.ofFloat(...)); // anim 4
as.setDuration(600);
as.start();

不过,除了在监听器中涉及回调 onAnimationEnd 的肮脏 hack 之外,仍然没有解决重复问题。必须是一种更简单的方法,所以也许有人知道后可以编辑它。

无论如何,希望以上内容对某人有所帮助。

关于Android - AnimatorSet、Object Animator - 弹跳动画链正在合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426052/

相关文章:

javascript - 通过滚动触发 CSS 关键帧动画

ios - UIStackView 隐藏 View 动画

javascript - Vue.js 2 页面和元素转换与 vue-router

c# - MVVMCross Release 构建不工作(LinkerPleaseInclude Listview)

android - 与我的应用程序图标共享 Android 文本

android - Android 中的 HttpClient 身份验证

android - 在 Ionic 应用程序中禁用硬件后退按钮?

java - 如何将 View 移动到屏幕最近的边缘?

Android 动画被延迟,第一个动画没有运行完整长度

java - `JNI_OnLoad` 是否总是在主线程中调用?