Android开发 摄像头SurfaceView预览 背景带矩形框 实现(原理 双surfaceview,顶层画矩形框,

               

       为了能在摄像头预览的时候,背景有个矩形框、或一些坐标、横线来标示关键位置,真让杂家费劲心思了。苦苦研究了两天,毫无进展。baidu了若干资料,大都是提出这个问题,但怎么解决的没有说,都不了了之。后来转而google,又研究了两天,终于完美解决啦!

1,网上介绍的摄像头预览,一般是用一个surfaceview,为了能让其正常预览视频,设置属性      

 mySurfaceView.setZOrderOnTop(true);        
 mySurfaceHolder = mySurfaceView.getHolder();
 mySurfaceHolder.setFormat(PixelFormat.TRANSPARENT)

我先前也是在这种思路下,看能否加画个矩形框。这篇http://blog.sina.com.cn/s/blog_4e6922ab01010gfz.html文章提到一种方法,是用一个surfaceview,然后自己定义一个继承View的画矩形框的类DrawCaptureRect,经我实践,发现还是不中。用这种思路,在摄像头未预览的时候可以看到红色矩形框,但一点击预览,矩形框就被覆盖了。

2,还有一种思路是,在预览surfaceview的callback里面,取到canvas画布,然后画。这种思路也行不通,程序直接挂掉!

3,后来我想到了framelayout,用帧布局,融合第一种方法的思路,结果还是未能解决预览的时候,视频遮挡矩形框的问题。

4,还有人提出,给surfaceview或其所在的布局文件里加一个带矩形框的图片的方法,更是行不通!说这话的人真是站着不腰疼,别说背景设成带图片的矩形框,就是背景设成有颜色的,预览的surfaceview就不显示了,被遮挡了。

           原来,当SurfaceHolder对象的类型设置为SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS时就只能拍照不能绘制了,这就是为什么第二种思路程序会直接挂掉的原因。为了能够预览视频的同时绘制矩形框等信息,需要用两个同样大小的SurfaceView放在一个FrameLayout里,顶层的SurfaceView设成setZOrderOnTop(true);   setFormat(PixelFormat.TRANSPARENT) ;预览的Surfaceview这两个属性就不用设置了。

    首先在包yan.guoqi.testphoto下新建一个类SVDraw,如图:

源码如下:

package yan.guoqi.testphoto;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.PixelFormat;import android.util.AttributeSet;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;/*定义一个画矩形框的类*/public class SVDraw extends SurfaceView implements SurfaceHolder.C
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值