【问题标题】:Animating non-view objects in Android在 Android 中为非视图对象设置动画
【发布时间】:2016-11-01 16:00:14
【问题描述】:

在阅读了关于 PropertyAnimator 的文档后,我们似乎可以为每个对象设置动画,只要满足以下条件之一,

  • 如果您有权这样做,请将 setter 方法添加到类中。
  • 使用您有权更改的包装器类,并让该包装器使用有效的 setter 方法接收值并将其转发给原始对象。
  • 改用 ValueAnimator。

我正在尝试在菜单中的 MenuItem 的 Drawable 或 StateListDrawable 上制作动画。由于drawables不包含setter方法,我想知道是否有人使用过ValueAnimator进行翻译动画,可以提供一些例子。

【问题讨论】:

标签: java android android-animation material-design objectanimator


【解决方案1】:
ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
animator.setDuration(300);
animator.setInterpolator(new CycleInterpolator(3));
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        label.setTranslationX(((Float) animation.getAnimatedValue()) * 20);
    }
});
animator.start();

ValueAnimator 非常简单,可以用来为任何东西制作动画。您只需在动画的每一帧中手动更新所需的值并使视图无效。上面的动画将一个标签摇了三下。

【讨论】:

  • 谢谢!当我们被允许更新值并使我们想要动画的对象中的视图无效时,这将起作用。当它是一个内置的 MenuItem 时会发生什么?是否需要创建一个包装 menuItem 的包装类?
  • Drawables 有一个内置的方法来刷新他们的父母。只需为 drawable 设置动画并在需要时调用 invalidateSelf()。
猜你喜欢
  • 2015-05-27
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多