我正在尝试在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();