我试图在Android中使用画布在TextureView上绘制。我正在线程内执行此操作,但是由于某些原因,当我尝试运行程序时,出现了 null指针异常。我已经在surfaceAvailable()回调中实现了我的线程,但仍然无法绘制。我可能做错了什么?
这是我到目前为止尝试过的:
这是我的堆栈跟踪:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.Canvas.drawColor(int, android.graphics.PorterDuff$Mode)' on a null object reference
答案 0 :(得分:1)
我相信问题就在这里
final Canvas canvas = mSurface.lockCanvas(null);
看看官方文档:
lockCanvas
公共抽象画布lockCanvas()
开始编辑曲面中的像素。返回的Canvas可用于绘制表面的位图。 如果尚未创建曲面或否则无法对其进行编辑,则返回null 。通常,您将需要实现Callback.surfaceCreated来确定何时可以使用Surface。
您可能正在尝试在创建曲面之前在其上绘图。在这种情况下,必须确保只有在表面准备就绪后才能调用lockCanvas()(侦听表面创建过程)。另外,在这种情况下,应使用不带参数的lockCanvas(),如下所示:
final Canvas canvas = mSurface.lockCanvas();