其他分享
首页 > 其他分享> > Android:SurfaceView忽略了postInvalidate()?

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