【问题标题】:How to deal with overlapping RotateAnimation-s on Android?如何处理 Android 上的重叠 RotateAnimation-s?
【发布时间】:2014-03-30 07:19:33
【问题描述】:

我正在使用RotateAnimation 为指向箭头设置动画,当用户更新目标点或当前设备位置更改时,该箭头会更新其位置。我正在使用interpolator.accelerate_decelerate 使动画看起来更流畅和“物理”。

当当前动画仍在处理时,一切都很好,直到另一个更新到达,例如,当用户更改目标而指向箭头仍在旋转时。发生这种情况时,箭头会急剧反弹,看起来很难看,我试图避免这种情况。我试图实现一个队列,让每个下一个动画等到前一个结束,它看起来不错,但行为变得非常不合逻辑。

所以我的问题如下:

1) 在动画一个接一个开始并相互重叠的情况下,有什么方法可以使动画过渡更平滑

2) 有没有办法停止当前正在处理的动画并获取对象的中间位置?--如果我决定在动画结束之前停止动画并使用当前位置作为起点下一个动画。

【问题讨论】:

  • 扩展RotateAnimation并覆盖其applyTransformation然后调用super.applyTransformation保存变换矩阵后,该矩阵用于旋转
  • 或者只是在你的项目中使用这个github.com/android/platform_frameworks_base/blob/master/core/…并将“度”保存在applyTransformation中
  • @pskink 非常感谢您给我一个起点!现在我正在查看源代码以了解动画在 Android 中是如何执行的——根据我的需要对它们进行微调(例如,实现转储振荡器方程以使我的箭头更“物理地”移动)
  • 在这种情况下使用自定义插值器
  • @pskink 我尝试了自定义插值器,但在重叠的情况下无济于事......如果每次动画循环访问它时我都能重建变换矩阵,它会有所帮助,但它是相当的很难发现如何实现它。我会试试的

标签: android animation rotation android-sensors


【解决方案1】:

好的,所以最简单的方法是创建一个类似于 RotateAnimation 的自定义动画,并将当前的旋转角度保存在 applyTransformation 中,然后这个角度可以用作下一个动画的起始角度,从而避免“跳跃”

【讨论】:

    【解决方案2】:

    扩展 ImageView 的自定义类,根据磁场中偶极子的角运动执行动画:

    https://stackoverflow.com/a/22738030/3459206

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多