文章目录
前言
在最近接手的需求中,笔者需要在一个网页上利用SurfaceView进行矩形或圆形的绘制,这里需要用到SurfaceView、Canvas、Paint等知识
一、自定义SurfaceView相关实现代码
这篇博客更多以介绍和解决Bug为主,所以具体功能实现代码笔者就不过多进行赘述
if (mHolder != null) {
mCanvas = mHolder.lockCanvas(); // 获得画布对象,开始对画布画画
mCanvas.drawRect(mRect,p);//1
mHolder.unlockCanvasAndPost(mCanvas); // 完成画画,把画布显示在屏幕上
}
二、问题
mHolder.lockCanvas()返回值为null
mHolder.lockCanvas()返回值为null,在代码1处报空指针异常崩溃
三、原因及解决措施
lockCanvas()需要得到当前SurfaceHolder的宽度的高度
经过查阅相关博客,得知lockCanvas()需要获取当前Surface的width和height,而笔者把lockCanvas()方法写在onCreate()方法中,而了解View机制的朋友都知道在onCreate()方法中通常是无法获取控件的宽高
解决办法
将lockCanvas()方法从onCreate()方法转移到setOnClickListener()方法中,不在onCreate()方法中触发。