Android:SurfaceView忽略了postInvalidate()?
作者:互联网
这是我第一次使用它,所以我不确定它是否是我的代码中的错误,还是我试图做不允许的事情.
当前,我有一个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()感到困惑.为了使它起作用,我需要做任何标记或初始化吗?
欢迎任何建议或理论.
谢谢!
解决方法:
你这血腥的传说卡兰!
那以正确的方式指出了我.
我发现一些帖子提到必须在surfaceCreated()方法而不是构造函数中完成,并且它使postInvalidate()正常工作.
但是,启用该功能将禁用我的自定义DrawThread完成的所有绘图.
好消息是,应该很容易找到一个合适的时间来安排该呼叫.
再次感谢,View.setWillNotDraw()做到了.
标签:surfaceview,ondraw,android 来源: https://codeday.me/bug/20191102/1993993.html