位置: 编程技术 - 正文

Android Camera探究之路——起步(android camera preview)

编辑:rootadmin
Android Camera探究之路——起步

推荐整理分享Android Camera探究之路——起步(android camera preview),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android camera app,android camera demo,android camera1,android camera preview,android camerax,android camera preview,android camera api,android camera api,内容如对您有帮助,希望把文章链接给更多的朋友!

Camera在手机中有着举足轻重的地位,不管是二维码还是照片、识别,都离不开摄像头,本文将对Android中的Camera进行全面解析。

权限镇楼:

调用系统Camera

通过系统定义的Intent Action,我们可以很方便的使用所有实现了Camera功能的App。

ACTION_IMAGE_CAPTURE

这个action是最常用的一个调用系统Camera的action。

使用方式如下:

通过这样一个Action,我们就可以调用所有声明了Camera的App。 那么如何收到拍摄的图片呢?我们自然是需要使用startActivityForResult方法。

这里我们先来看最简单的:

我们在:

onActivityResult方法中,通过data参数来获取图像:

但是,现在手机像素这么高,万一图片特别大呢,会不会data过大而FC呢?放心,Android早就考虑到了,所以,data里面压根就不是完整的图片,它只是一张缩略图,对,真的是缩略图。所以,我们需要获取到拍摄的原图,就不能使用这种方法。但是我们可以这样做,我们可以指定MediaStore类的一个EXTRA_OUTPUT来指定拍摄图像保存的位置,相当于建立一个临时文件。在onActivityResult中,我们不使用data来获取图像,而是直接去读这个临时文件即可。

指定EXTRA_OUTPUT:

onActivityResult:

这样我们就可以获取到完整的拍摄图片了。后面你可以让图像显示出来,显示的时候,同样需要考虑大图的处理,避免图像尺寸带来的问题,这些东西,请参考这里:

Android Doc,自定义一个Camera需要如下几个步骤:

1.检查Camera是否存在,并在AndroidManifest.xml中赋予相关的权限;

2.创建一个继承于SurfaceView并实现SurfaceHolder接口的Camera Preview类;

3.新建一个Camera Preview布局文件;

4.设置一个拍照的监听事件,例如单击按钮事件等;

5.实现拍照,并保存拍照后的图片到设备;

6.释放Camera。

看上去还是比较复杂的。所以我们一步步来。

首先,我们创建预览Camera的界面:

非常简单,两个button下面一个surfaceview:

然后,我们创建一个Activity,用来展示Camera的预览:

Android Camera探究之路——起步(android camera preview)

这个Activity里面肯定有SurfaceView,所以,SurfaceView的那一套东西,自然是少不了,不懂的请自行脑补。

那么在这个Activity里面,我们需要做什么呢?两件事情:

初始化相机将内容显示到SurfaceView

Android的Camera是独享的,如果多处调用,就会抛出异常,所以,我们需要将Camera的生命周期与Activity的生命周期绑定:

onResume方法中初始化相机onPause方法中释放相机

初始化相机非常简单:

释放相机也非常简单:

那么下面我们再来看如何把相机图像设置到SurfaceView中进行预览:

尼玛,是不是也非常简单,camera的一个方法已经帮我们自动关联了SurfaceView。

PS 这里需要注意下这个方法camera.setDisplayOrientation(),通过这个方法,我们可以调整摄像头的角度,不然默认是横屏,图像会显示的比较奇怪。当然,即使你设置的,图像也有可能比较奇怪,这是因为你没有对图像进行正确的缩放,比例不对。

通过上面的设置,我们已经可以正常预览摄像头的图像内容了,下面我们就可以拍照了。

唉,拍照真的也非常简单,就一句话:

当然,为了配合拍照,我们需要做一些设定,设置拍照的参数,并且给拍照之后的动作设定一个回调:

参数:

回调:

在回调中,我们将拍摄好的图片地址传递给用于展示的ImageView。这样就完成了相机的拍摄与图片的展示。

处理图像变形

由于我们自己在布局中创建了一个SurfaceView,而且我们之间让他match_parent了,所以,图像在preview的时候,肯定是会有拉伸的。那么如何处理这些变形呢?

我们可以通过改变SurfaceView大小的方式来实现,在Android API Demo中,Google也给我们提供了这样一个实例:

路径如下: android-/legacy/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.java

Google就是通过设置新的大小来适应预览区域大小的方式来解决变形问题的,所以说,内事不懂看源码,外事不懂看Demo。

自定义取景画面

听上去非常高大上,其实,真的非常简单,你只需要用一个FrameLayout把用来Preview的SurfaceView包起来就OK了,下面你想加什么,就直接在FrameLayout中加吧,like this:

不光了ImageView,ViewPager也可以,这样甚至可以做一个可切换的水印相机了。是不是非常简单,而且加入的一切都是可操作的,加动效、颜色,分分钟搞定。

以上。

起步之后,我们要开始跑了。

代码下载,请移步全球最大同性程序猿交友社区:

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android自定义View圆环带文字进度条 项目原型图中有这样的一种进度条由于懒得找第三方(找到的不一定合用,有找的时间自己也就写了一个)自定义所需要的属性?xmlversion="1.0"encoding="utf-8

Android Socket 通信实例...【Pnoker】 这几天一直在学习Java套接字,昨天做了个小实验,发现仅简单的把JavaSocket通信的代码放在Android上是会报错的,而且问题还很大,于是乎,我就搜集了

迁移项目到Android Studio 由于公司项目需要多包名APK的支持,所以把公司的项目从eclipse迁移到了AndroidStudio.以下是一些迁移经验:迁移准备AndroidStudio对代码检查比较严格,代码

标签: android camera preview

本文链接地址:https://www.jiuchutong.com/biancheng/374362.html 转载请保留说明!

上一篇:Android之EventBus概述及源码解析(雷惊风)(android observer)

下一篇:Android自定义View圆环带文字进度条(android自定义view ondraw有时候不执行)

  • 应交税费借方余额0.01怎么调整
  • 应收账款余额不对怎么调账
  • 小微企业开票多少算小规模纳税人
  • 外出经营能自带食物吗
  • 固定资产大修理的标准
  • 契税印花税的会计分录怎么写
  • 企业股权转让如何避税收
  • 购进原材料发生非正常损失,账面成本10万元 该原材料
  • 取得消费税出口退税款如何做会计处理?
  • 融资租赁的服务费的标准
  • 航天信息的服务费
  • 发票开具提示
  • 银行缴纳印花税的范围
  • 公司拖欠工资还要继续工作吗?
  • 发票一直报送中,开不了发票
  • 停车场增加收入
  • 如何理解应税行为的概念
  • 收购药材再销售可以免税
  • 小规模纳税人咨询服务费税率是多少
  • 金税盘怎么做账务处理
  • 企业向个人借款支付的利息
  • 公司发工资了
  • 预提成本的会计处理
  • Linux系统怎么调整屏幕亮度
  • 事业单位收到奖励款怎么入账
  • 增值税专用发票丢了怎么补救
  • windows11激活密钥多少钱
  • 总公司拨给分公司款需要交税吗
  • 购入固定资产后发生的员工培训费应计入固定资产的成本
  • cesium加载s3m
  • 出租设备的租金收入应计入什么科目
  • php对二维数组进行排序
  • vue引入文件路径@的意思
  • php预处理查询
  • javaweb购物车设计报告
  • 政府代建项目税收政策
  • 基于SadTalker的AI主播,Stable Diffusion也可用
  • 代发工资一般收多少服务费
  • 贷款 减值
  • 没有残疾人就业保障金需要申报吗
  • 资产处置费用是资产类会计科目吗
  • 社保退回的款怎么继承
  • 织梦百科
  • MySQL中使用什么语句来更新表中的记录
  • 售后回购会计处理分录
  • 企业的资产评估报告在哪里获取
  • SQLServer 2008 :error 40出现连接错误的解决方法
  • 职工教育经费是从工资里扣吗
  • mysql从一个库导入进另一个库
  • 实际已缴纳所得税额大于初始化金额
  • mssqlserver怎么用
  • 企业向个人的借款合同
  • 车辆保险发票一般在哪开
  • 当年的应收账款需要提坏账吗
  • 承兑汇票贴现利息会计分录
  • 小微企业如何自己开发票
  • 银行证书费入什么科目
  • 简述账套管理的主要内容
  • sqlserver数据库和mysql区别
  • ubuntu mysql 5.6版本的删除/安装/编码配置文件配置
  • Win10 PC/Mobile Creators快速预览版14959今日推送
  • 怎么制作win7系统u盘装系统教程
  • centos 3
  • u盘制作winpe启动盘
  • pvlsvr.exe - pvlsvr是什么进程 有什么用
  • win8在哪里看安装的所有程序
  • win7 虚拟磁盘
  • undefined reference to pthread
  • bootstrap 网格
  • python图片处理酷炫效果
  • 几个常用的微课网站
  • cmd开机启动命令
  • shell打开日志文件
  • unity协程会阻塞主线程吗
  • javascript基础笔记
  • python定义全局
  • python with 用法
  • 荒野大镖客2焦煤油与贪婪怎么开启
  • 网上缴公积金怎么查询
  • 开票盘是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设