我正在尝试在Android中使用画布在TextureView上绘制。我正在线程内执行此操作,但是由于某种原因,当我尝试运行程序时,出现了空指针异常。我已经在surfaceAvailable()回调中实现了我的线程,但仍然无法绘制。我可能做错了什么?

这是我到目前为止尝试过的:

这是我的堆栈跟踪:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.Canvas.drawColor(int, android.graphics.PorterDuff$Mode)' on a null object reference

最佳答案

我相信问题在这里:

final Canvas canvas = mSurface.lockCanvas(null);


看一下官方文档:


  lockCanvas
  
  公共抽象Canvas lockCanvas()
  
  开始编辑表面中的像素。返回的Canvas可用于绘制表面的位图。如果尚未创建曲面或无法编辑曲面,则返回null。通常,您将需要实现Callback.surfaceCreated来确定何时可以使用Surface。


您可能正在尝试在创建曲面之前在其上绘图。在这种情况下,必须确保仅在准备好曲面后(侦听曲面创建)才调用lockCanvas()。另外,在您的情况下,应使用不带参数的lockCanvas(),如下所示:

final Canvas canvas = mSurface.lockCanvas();

07-28 04:40