我试图创建一个逐帧弹跳球类动画,类似于this一个。
虽然它在我的设备上完美运行,但动画并没有真正定时。那么onDraw()
定时(即定期调用一定延迟)?或者,在具有非常高帧速率的设备上,动画可以快速运行并在帧速率较低的设备上运行缓慢。
使用runnable更好的方法吗?
答案 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