Android 自定义Camera(一)如何预览相机
Android Camera之如何预览相机
1、官方Api描述
翻译后为:
使用android.hardware.Camera拍照,请使用以下步骤:
1.从open(int)获取一个Camera实例。
2.使用getParameters()获取现有(默认)设置。
3.如有必要,修改返回的相机配置,调用setParameters(android.hardware.Camera.Parameters)。
4.调用setDisplayOrientation(int)以确保预览的正确方向。
5.重要:传递一个完全初始化的SurfaceHolder到setPreviewDisplay(android.view.SurfaceHolder)。没有surface,相机将无法启动预览。
6.重要提示:调用startPreview()以开始更新预览面。在拍照前必须先预览。
7.当你需要保存图片时,调用takePicture(android.hardware.Camera)。ShutterCallback android.hardware.Camera。PictureCallback android.hardware.Camera。PictureCallback, android.hardware.Camera.PictureCallback)来捕获照片。等待回调提供实际的图像数据。
8拍照后,预览显示将停止。要拍摄更多照片,请先再次调用startPreview()。
9.调用stopPreview()停止更新预览面。
10.重要提示:调用release()来释放相机,以供其他应用程序使用。应用程序应该在Activity.onPause()中立即释放摄像机(并在Activity.onResume()中重新打开它)。
2、实现简单的预览
1>添加权限(注意6.0.0后需要动态申请权限,否则闪退)
<uses-permission android:name="android.permission.CAMERA" /><uses-feature android:name="android.hardware.camera" /><uses-feature android:name="android.hardware.camera.autofocus" />
2> 定义显示画面的容器
<SurfaceViewandroid:id="@+id/preview_surface"android:layout_width="match_parent"android:layout_height="match_parent"/>
3>初始化相机
private Camera mCamera;//相机mCamera = Camera.open();
4>为SurfaceView添加生命周期回调
mPreview = findViewById(R.id.preview_surface);
mPreview.getHolder().addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {/*** The SurfaceHolder must already contain a surface when this method is called.* If you are using SurfaceView, you will need to register a SurfaceHolder.Callback* with SurfaceHolder#addCallback(SurfaceHolder.Callback) and wait for* SurfaceHolder.Callback#surfaceCreated(SurfaceHolder) before* calling setPreviewDisplay() or starting preview.* 相机的预览必须在surfaceCreated后调用,否则黑屏且没有任何提示哦*/try {mCamera.setPreviewDisplay(mPreview.getHolder());} catch (IOException e) {e.printStackTrace();}mCamera.startPreview();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {Log.e("TAG", "初始化surfaceChanged时的Holder对象" + mPreview.getHolder().toString());}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}});
5>生命周期处理
@Overrideprotected void onResume() {super.onResume();if(mCamera != null) {mCamera.startPreview();}}@Overrideprotected void onPause() {super.onPause();if(mCamera != null) {mCamera.stopPreview();}}@Overrideprotected void onDestroy() {super.onDestroy();if(mCamera != null) {mCamera.release();}}
最后
OK,只要如此我们就实现了一个简单的相机预览功能。下篇文章我们将继续讨论如何实现自定义相机的拍照功能。飞机票
Android 自定义Camera(一)如何预览相机相关推荐
- Android 自定义Camera相机(封装工具类贼简单)
背景 目前公司的项目都是,针对生物认证来进行一些验证之类的功能,比方说,交互式活体检测,人脸1v1(对比),人脸1vN(搜索).用系统自带的相机?当然是不够用了,不够用那就自定义啦,就像是前几天七夕, ...
- Android自定义camera相机 系列(一)
该文章 主要使用 自定义 surfaceview 及 camera 知识点,来实现一个自定义的拍照 .切换闪光灯 和 前后摄像头的功能.阅读需要消耗时间 :15分钟+ .内容比较简单算是 开发相机的过 ...
- 【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )
文章目录 安卓直播推流专栏博客总结 一. Camera 传感器方向简介 二. Camera 图像传感器横向显示数据 三. Camera 图像传感器纵向显示数据 四. 设置 Camera 预览数据方向 ...
- 【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )
文章目录 安卓直播推流专栏博客总结 一. Android 端数据采集涉及到的相关概念 二. Camera 预览图像尺寸设置 三. 获取摄像头采集的数据格式 安卓直播推流专栏博客总结 Android R ...
- android 相机预览的分辨率,Android开发 Camera2开发_2_预览分辨率或拍照分辨率的计算...
前言 不管在Camera1或者Camera2在适配不同手机/不同使用场景的情况下都需要计算摄像头里提供的分辨率列表中最合适的那一个分辨率.所以在需要大量机型适配的app,是不建议不经过计算直接自定义分 ...
- android 摄像头比例,Android摄像头是全屏预览最简单的方式.doc
Android摄像头是全屏预览最简单的方式 Android Camera做全屏预览之最简单方法 M厂开发五部:刘 博 一.全屏预览与非全屏预览的区别 对于大多数人来说,我们看电影.玩游戏等都喜欢全屏, ...
- Android 视频 短视频录制预览尺寸(简单几款机型测试)
Android 视频 短视频录制预览尺寸(简单几款机型测试) 贴出下列2表目的也是便于大家对一般相机照片和预览主流尺寸有个大概了解 SurfaceView 照片支持尺寸 Picture Nexus 5 ...
- android 组件消失了,Android 12 2.2 开发者预览版发布:修复桌面小组件消失等问题...
IT 之家 4 月 8 日消息 据外媒 XDA 论坛消息,Android 12 2.2 开发者预览版今日发布,同时包含安卓 2021 年 4 月安全更新.本次预览版主要修复了一些错误,没有带来重要功能 ...
- android xml 预览,解决Android studio xml界面无法预览问题
解决Android studio xml界面无法预览问题 发布时间:2020-10-05 18:48:37 来源:脚本之家 阅读:140 作者:张雨明 如下图 修改style.xml中的 parent ...
最新文章
- 20155222卢梓杰 课堂测试ch06补做
- 生成任意内容任意类型的文件
- Linux16.04配置CUDA8.0+CUDNNV5.1
- 在java中实现日期类型和字符串类型的转换大全(Date String Timestamp Datetime)
- 语言坐标度分秒的换算_测量位置度说明
- Eclipse 中修改java编译版本
- VMware vCenter Converter Standalone 5.0的安装
- 深度学习之人脸检测实践-现有框架实现 opencv Face++
- 更换mysql_用这47 张图带你 MySQL 进阶!!!
- SAP License:SAP从业者的收入状况
- 基于tetgen对曲面分隔的box区域做限定四面体剖分
- 【iOS报错】“Internal error. Please file a bug at bugreport.apple.com and attach /var/folders/v5/......”
- 博弈论Python仿真(二)
- smartadmin_smartadmin 下载_smartadmin 官网
- b2c京东流程图_京东商城网上交易流程分析
- 商标主要特征是什么?商标注册申请流程是什么?
- 文件上传漏洞---Web渗透学习
- 同花顺_代码解析_技术指标_P、Q
- Python面向对象—新旧式类,私有方法,类方法,静态方法
- Google收购摩托罗拉移动,仅仅是为了专利吗?