Android绘图颜色空指针异常
问题描述:
我有一些问题,在我的代码中我想绘制frameLayout画布,但我得到空对象引用异常。顺便说一下,当我改变Color.BLACK没有改变只显示黑色的矩形,并给出错误。 我使用Android 2.1的工作室和genymotion Android模拟器6.0棉花糖Android绘图颜色空指针异常
错误是这样的:
Fatal Exception:main
Process:com.example.myApp
java.lang.NullPointerException : Attempt to invoke virtual method "void android.graphics.Canvas.rawColor(int)" on a null object reference
public class MyCanvas extends SurfaceView implements SurfaceHolder.Callback{
private boolean mRun= false;
private final SurfaceHolder mSurfaceHolder;
private final Object mRunLock = new Object();
public MyCanvas(Context context, AttributeSet attrs){
super(context,attrs);
this.setWillNotDraw(false);
mSurfaceHolder = getHolder();
mSurfaceHolder.AddCallback(this);
}
public synchronized void run(){
if(mRun){
Canvas c = null;
try{
c = mSurfaceHolder.lockCanvas();
synchronized (mSurfaceHolder){
synchronized(mRunLock){
if(mRun) doDraw(c);
}
}
}finally
if(c != null)
{ mSurfaceHolder.unlockCanvasandPost(c); }
}
}
private void onDraw(Canvas canvas){
canvas.drawColor(Color.YELLOW);
}
}
我的活动布局代码是在这里。
<view class="com.example.myapp.MyCanvas"
android:layout_width="200dp"
android:layout_height="200dp"
android:lid="@+id/mycanvas"
/>
我的活动课就在这里
MyCanvas myCanvas = (MyCanvas)findViewById(R.id.mycanvas);
myCanvas.run();
答
的问题是,在画布返回从lockCanvas为空。
引用文档:
返回画布可用于绘制表面的位图。 A 如果曲面尚未创建或以其他方式无法编辑 ,则返回null。您通常需要执行 Callback.surfaceCreated以了解Surface何时可以使用 。
因此,您必须实施Callback.surfaceCreated并在调用surfaceCreated后开始编辑画布。
谢谢surfacedestroyed方法的工作。当我将mRun分配给false时,错误消失了。 –