Android:SurfaceView忽略了postInvalidate()?

概述这是我第一次使用它,所以我不确定它是否是我的代码中的错误,还是我试图做不允许的事情.当前,我有一个DrawThread()在run方法中执行此 *** 作.try{c=m_surfaceHolder.lockCanvas(null);synchronized(m_surfaceHolder){m_view.onDraw(c);}}finally{if(c!=

这是我第一次使用它,所以我不确定它是否是我的代码中的错误,还是我试图做不允许的事情.

当前,我有一个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()做到了.

总结

以上是内存溢出为你收集整理的Android:SurfaceView忽略了postInvalidate()?全部内容,希望文章能够帮你解决Android:SurfaceView忽略了postInvalidate()?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1210529.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存