经过一番努力,我确定 SurfaceView
不会做我想要它做的事情,即位于某些 UI 元素之上和其他 UI 元素之下。我还发现,将所有 UI 元素绘制到 SurfaceView 上实际上比我试图替换的多层层次结构慢得多。因此,我尝试使用 onDraw()
编写自己的动画 View
代码。
我能想到的最简单的方法大致如下:
- 现在测量时间
- 执行有关动画状态的计算
- 调用
invalidate()
- 在
onDraw()
处绘制动画 - 返回1。
我的 SurfaceView
中已经有一个 nextFrame()
函数,它执行步骤 1 和 2,并且绘制函数实际上很简单 - 一条路径。我可以让 nextFrame()
调用 invalidate()
并且可以让 onDraw()
调用 nextFrame()
表示绘图已完成,我们已准备好下一帧。不幸的是,我可以想象这会引起问题。
invalidate()
是否直接调用onDraw()
?我需要像 SurfaceView
中那样实现调用线程吗?
最佳答案
不会,不会导致堆栈溢出。
关于android - 从 onDraw() 调用 invalidate() 会导致堆栈溢出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11259324/