这是我第一次使用它,所以我不确定它是否是我的代码中的错误,或者我正在尝试做一些不允许的事情。
目前,我有一个DrawThread(),它在run方法中执行此操作。
try {
c = m_surfaceHolder.lockCanvas(null);
synchronized (m_surfaceHolder) {
m_view.onDraw(c);
}
}
finally {
if (c != null) {
m_surfaceHolder.unlockCanvasAndPost(c);
}
}
在这个绘图线程(非UI线程)中,我的onDraw()方法将画布传递给另一个名为drawScoreboard()的方法。我希望这种方法在显示记分板的每一行之间有一个短暂的延迟,所以我添加了一个postInvalidateDelay(x),希望它再次触发onDraw()。
/**
* A helper function which draws the scoreboard.
*/
private void drawScoreboard(Canvas canvas) {
long delay = m_drawScoreboard.draw(canvas, m_paint);
if (delay > 0) {
this.postInvalidateDelayed(delay);
}
}
代码正确执行并且正在调用postInvalidateDelayed(),但我很困惑为什么没有调用onDraw()。为了让这个工作起作用,我需要做任何标记或初始化吗?
欢迎任何建议或理论。 谢谢!
答案 0 :(得分:4)
你是血腥的传说Karan!
那是以正确的方式指出了我。 我发现有一些帖子提到它必须在 surfaceCreated()方法而不是构造函数中完成,它使 postInvalidate()工作。但是,启用此功能会禁用我的自定义 DrawThread 所做的任何绘图。 好的是,应该很容易找到一个很好的时间来插入该电话。
再次感谢, View.setWillNotDraw()完成了这一操作。