SurfaceView中lockCanvas返回值为null

本文探讨了在Android开发中,使用TextureView进行相机预览时遇到无法同时绘图的问题。TextureView不允许同时作为相机预览和Canvas绘图的对象。为解决此限制,采用了一个ImageView叠加在TextureView之上,通过重写onDraw方法实现绘图效果。
摘要由CSDN通过智能技术生成

最近在做一个安卓项目,需要使用TextureView或者SurfaceView对相机进行预览,在预览的同时又想要在屏幕上进行绘图操作。

于是使用lockCanvas()获取Canvas对象,但是程序就会在运行时候报错:null reference,程序崩溃。检查一下lockCanvas返回的canvas的确是null。

花了很长时间查错,终于在Android开发官网上找到了原因:

http://developer.android.com/intl/zh-cn/reference/android/view/TextureView.html

在网页的最后一段:

It is important to note that only one producer can use the TextureView. For instance, if you use a TextureView to display the camera preview, you cannot use lockCanvas() to draw onto the TextureView at the same time.

也就是说,只能有一个用户使用TextureView,在提供camera preview的同时是不可以进行Canvas的绘制的,lockCanvas()的值就是null。

在StackOverFlow上也有相似的问题:

http://stackoverflow.com/questions/2933882/how-to-draw-an-overlay-on-a-surfaceview-used-by-camera-on-andrOid

问题的原因同样是TextureView给Camera做预览以后,又进行绘图。

最后采取的解决方法是,再建一个ImageView,把这个ImageView显示在TextureView的前面,然后重写ImageView的onDraw方法,最后在屏幕上看到的就是TextureView上“绘制”了ImagView,这样就是用两个图像叠加进行显示。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值