Canvas onDraw是否定时?

时间:2017-01-13 05:59:56

标签: java android android-animation

我试图创建一个逐帧弹跳球类动画,类似于this一个。

虽然它在我的设备上完美运行,但动画并没有真正定时。那么onDraw()定时(即定期调用一定延迟)?或者,在具有非常高帧速率的设备上,动画可以快速运行并在帧速率较低的设备上运行缓慢。

使用runnable更好的方法吗?

1 个答案:

答案 0 :(得分:1)

  

使用runnable是一种更好的方法吗?

使用runnable没有任何问题。您的要求是在好的手机上运行60fps,在低端设备上运行较小的fps:

  

Canvas onDraw是否定时?

目前你的画布onDraw()必须每16ms触发一次,以获得60fps的动画效果。根据您的情况,每隔32毫秒减少一次触发。

注意:
  我们只能通过在画布视图上调用invalidate来触发onDraw方法。但我们不能100%确定您的所有无效将导致重绘。这是一些镜头掉落的地方,在这里和那里,将从你的动画中消除光泽。

我的2美分:

当您在画布上处理自定义视图时,使用值动画制作器执行重绘(失效)将使您可以灵活地应用任何类型的缓动功能。还有一些有趣的文章可以帮助你理解画布是如何工作的,这样你就可以避免错过画面。

https://hackernoon.com/android-draw-a-custom-view-ef79fe2ff54b#.vtdmbs95g

https://medium.com/dualcores-studio/make-an-android-custom-view-publish-and-open-source-99a3d86df228#.3jdi1pbt7