android - 从 onDraw() 调用 invalidate() 会导致堆栈溢出吗?

标签 android stack-overflow ondraw invalidation

经过一番努力,我确定 SurfaceView 不会做我想要它做的事情,即位于某些 UI 元素之上和其他 UI 元素之下。我还发现,将所有 UI 元素绘制到 SurfaceView 上实际上比我试图替换的多层层次结构慢得多。因此,我尝试使用 onDraw() 编写自己的动画 View 代码。

我能想到的最简单的方法大致如下:

  1. 现在测量时间
  2. 执行有关动画状态的计算
  3. 调用invalidate()
  4. onDraw()处绘制动画
  5. 返回1。

我的 SurfaceView 中已经有一个 nextFrame() 函数,它执行步骤 1 和 2,并且绘制函数实际上很简单 - 一条路径。我可以让 nextFrame() 调用 invalidate() 并且可以让 onDraw() 调用 nextFrame()表示绘图已完成,我们已准备好下一帧。不幸的是,我可以想象这会引起问题。

invalidate()是否直接调用onDraw()?我需要像 SurfaceView 中那样实现调用线程吗?

最佳答案

不会,不会导致堆栈溢出。

关于android - 从 onDraw() 调用 invalidate() 会导致堆栈溢出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11259324/

相关文章:

java - 计算 n = ~11000 + 带有内存的斐波那契递归方法时的堆栈溢出

android - 如何绘制三角形并将其添加到相对或线性布局android

delphi - 在 delphi 7.0 中创建打包结构时出现错误 EStackOverflow

java - StackOverflowError 不知道出了什么问题

android - 如何在 Android 中将 int 传递给我的 onDraw(Canvas canvas)?

android - 如何使用 ConstraintLayout 链接两个文本

java - 如何在 Android Studio 中使用 com.google.android.collect.list

android - Retrofit 2.0 处理 json 响应中的错误

java - 更改Android中EditText的颜色