经过多次努力之后,我确定SurfaceView
不会做我想做的事情,即超出一些UI元素而不是其他元素。我还发现在SurfaceView
上绘制所有UI元素实际上比我试图替换的多层次结构慢得多。因此,我正在尝试使用View
编码我自己的动画onDraw()
。
我能想到的最简单的方法大致如下:
invalidate()
onDraw()
我的nextFrame()
已经有SurfaceView
函数执行第1步和第2步,而绘制函数实际上是微不足道的 - 一条路径。我可以nextFrame()
拨打invalidate()
我可以onDraw()
拨打nextFrame()
来表示绘图已经完成,我们已准备好接下一帧。不幸的是,我可以想象这会导致问题。
invalidate()
是否直接致电onDraw()
?我是否需要像SurfaceView
中那样实现调用线程?
答案 0 :(得分:5)
不,它不会导致堆栈溢出。
答案 1 :(得分:0)
当你调用invalidate()时,你可以假设将调用onDraw(画布c),是的。
但是要小心调用onDraw()中的nextFrame,一定要控制刷新时间。
如果你想实现onDraw(Canvas c)方法,只需覆盖它,你可以随意绘制它。
如果您想根据当前时间控制刷新时间:
在方法1中,您说您正在控制当前时间:
//I assume you instantiate the lasTTime in the onCreate()
void method1() {
while (currentTime - lastTime < N) {
currentTime = //call the current time as you do
}
lastTime = currentTime;
//call method2
}