Android:getHolder().lockCanvas()返回值为null原因及解决办法


前言

在最近接手的需求中,笔者需要在一个网页上利用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()方法中触发。


版权声明:本文为qjyws原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。