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()方法中触发。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值