移动终端相机背景自带预览框的方法与流程

文档序号:16879526发布日期:2019-02-15 21:59阅读:451来源:国知局
移动终端相机背景自带预览框的方法与流程

本发明涉及andriod软件开发领域,特别涉及移动终端预览领域。



背景技术:

根据google的api文档,里面提供了一个能够展现图像的类即surfaceview类,它可以将图像绘制在屏幕上并显示给用户,在surfaceview类中,google为摄像重写了很多方法,它继承于view类,但是两者又有不同,其中一个重要区别就在于,surfaceview类是在一个单独的新线程中重新绘制画面来预览图像的,而view类却是在ui主线程上绘制画面,也就是说,surfaceview类可以避免线程阻塞、内存溢出和应用强退等问题,因而采用surfaceview类来预览图像,用户体验更好。

现有技术中为了能在拍照预览时在背景中出现预览框或者用坐标横线来标示关键位置,预览框可为矩形框,现有几种实现方法,例如方法一:采用一个surfaceview对象并定义一个继承view类的画预览框的类进行实现,但会出现在摄像头未预览时可以看到期望的预览框,但是一旦点击预览相关按钮进行预览时,用来预览的预览框就会被覆盖和遮挡,所以该方法不理想;方法二:在预览surfaceview的回调方法callback里面,先取到canvas画布后再绘制画面,可是这种方法存在程序会挂掉的风险;方法三:采用framelayout帧布局,再结合上述方法一,结果发现仍然不能解决预览时视频遮挡预览框的问题。



技术实现要素:

本发明所要解决的技术问题是:克服在预览时视频覆盖遮挡预览框问题,提出一种移动终端相机背景自带预览框的方法。

本发明解决上述技术问题,采用的技术方案是:

移动终端相机背景自带预览框的方法,包括如下步骤:

a、引入系统相机的操作权限;

b、创建一个继承于surfaceview类的surfaceview子类,设置surfaceview子类的zorderontop属性为true,format属性为pixelformat.transparent;在surfaceview子类中实现绘制预览框的方法,并将预览框绑定到activity类中;

c、设置用户界面布局xml文件,在xml文件的一个framelayout帧布局里引用surfaceview子类及与surfaceview子类布局大小相的surfaceview类;

d、在主activity类的oncreate()方法中初始化surfaceview子类的对象和surfaceview类的对象,分别记为对象一和对象二,设置对象二为visible;判断预览框是否需要可见,若是,则设置所述对象一为visible,通过对象一调用所述绘制预览框的方法来绘制预览框;否则设置对象一为invisible。

优选的,所述步骤b中,将预览框绑定到activity类中采用:surfaceview子类中创建带attributeset参数的构造方法;或,调用addcontentview()方法来添加该预览框。

进一步的,所述步骤a中还包括引入系统存储的操作权限。

本发明的有益效果是:

将大小相同的surfaceview类和surfaceview子类放在一个framelayout帧布局里面,surfaceview子类放在顶层,用于绘制预览框,另一个surfaceview类(android原生自带的控件)的预览框放在底层,用于预览图像,这样就能够实现同时绘制预览框和预览视频,解决了其他方法在预览时视频覆盖遮挡预览框的问题,且不会出现线程阻塞、内存溢出和应用强退的问题,提高了用户体验。

附图说明

图1为本发明实施例的方法流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例对本发明进行进一步详细说明。

移动终端相机背景自带预览框的方法,包括如下步骤:

a、引入系统相机的操作权限;

可以在manifest.xml中引入上述权限,如此可以使得本方法可以正常使用系统相机的功能。为了使得拍摄后的相片还能被存储,还可以进一步的引入系统存储的操作权限。

b、创建一个继承于surfaceview类的surfaceview子类,设置surfaceview子类的zorderontop属性为true,format属性为pixelformat.transparent;在surfaceview子类中实现绘制预览框的方法,并将预览框绑定到activity类中;

其中,预览框可以是矩形,采用drawline()方法进行绘制四条直线构成一个矩形,也可以是其它图形。

c、设置用户界面布局的xml文件,在xml文件的一个framelayout帧布局里引用surfaceview子类及与surfaceview子类布局大小相的surfaceview类;

其中,该xml文件可以是main.xml文件。步骤b中将预览框绑定到activity类中是指:在surfaceview子类中创建带attributeset参数的构造方法;或,调用addcontentview()方法来添加该预览框。

其中,surfaceview子类中创建带attributeset参数的构造方法可以用来自定义控件,该attributeset参数用于接收上述xml文件中定义的属性信息,例如布局的高、宽和文本等,可使得自定义控件具备上述属性,如此初始化surfaceview子类的对象时可将xml文件中定义的属性信息的空间布局进行添加。而addcontentview()方法用于添加surfaceview子类的控件布局。

d、在主activity类的oncreate()方法中初始化surfaceview子类的对象和surfaceview类的对象,分别记为对象一和对象二,设置对象二为visible;判断预览框是否需要可见,若是,则设置所述对象一为visible,通过对象一调用所述绘制预览框的方法来绘制预览框;否则设置对象一为invisible。

其中,预览框是否需要可见可以通过按钮设置,比如点击某个按钮就能更改预览框是否需要可见的状态。

实施例

如图1所示,本实施例的移动终端相机背景自带预览框的方法,包括如下步骤:

s1、在manifest.xml中引入系统相机及系统存储的操作权限;

s2、创建一个继承于surfaceview类的surfaceview子类,设置surfaceview子类的zorderontop属性为true,format属性为pixelformat.transparent;在surfaceview子类中实现绘制预览框的方法和带attributeset参数的构造方法;其中,预览框为矩形采用drawline()方法来绘制。

s3、设置用户界面布局的xml文件,在xml文件的一个framelayout帧布局里引用surfaceview子类及与surfaceview子类布局大小相的surfaceview类;

s4、在主activity类的oncreate()方法中初始化surfaceview子类的对象和surfaceview类的对象,分别记为对象一和对象二,设置对象二为visible;

s5、判断预览框是否需要可见,若是,进入步骤s6;否则进入步骤s7;

s6、设置所述对象一为visible,通过对象一调用所述绘制预览框的方法来绘制预览框;

s7、设置对象一为invisible。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1