Android 开发 Camera1_如何使用对焦功能
前言
Camera1的自动对焦还是有一些坑值得开一个篇幅来讲解,一般对焦Mode有以下几种:
- Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO 连续自动对焦视频
- Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE 连续自动对焦图像
- Camera.Parameters.FOCUS_MODE_AUTO 自动对焦(单次)
检查支持的对焦Mode
有些时候前摄像头不支持一些对焦模式,所以我们在切换摄像头后配置摄像就需要检查一遍支持的对焦模式
List<String> focusModeList = parameters.getSupportedFocusModes();
for (String focusMode : focusModeList){//检查支持的对焦
if (focusMode.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)){
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}else if (focusMode.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)){
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
}
}
FLASH_MODE_AUTO设置自动对焦Mode
其他对焦模式并没有上面好说的使用后会一直自动对焦,但是FLASH_MODE_AUTO对焦比较独特,它其实调用一次才触发一次的对焦.
Camera.Parameters parameters = mCamera.getParameters();
parameters.setFocusMode(Camera.Parameters.FLASH_MODE_AUTO); //对焦设置为自动
//其他参数配置略...
mCamera.setParameters(parameters);//添加参数
很简单在配置Camera1的时候调用setFocusMode(Camera.Parameters.FLASH_MODE_AUTO) 实现自动对焦
启用自动对焦
在上面将对焦设置为自动模式后,并不是真的就自动对焦(自动对焦的意思其实是当前屏幕中心的画面自动对焦),所以我们需要触发一次对焦.
mCamera.setPreviewTexture(surface);
mCamera.startPreview();
mCamera.autoFocus(new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) { }
});
注意!对焦是需要在预览开始之后才能调用的,否则报错.以上设置一次autoFocus 就等于对焦一次.注意!是只对焦一次! 它不是一直在对焦!
FLASH_MODE_AUTO实现主动对焦和被动对焦的思路
被动对焦的思路
被动对焦的思路很简单,用一个Button或者点击预览View进行一次对焦,所以,正常开发的情况下,需要使用一个布尔值来判断当前是不是在预览状态.
主动对焦
也很简单写一个Handler循环就行了,我下面的例子就是每隔2秒对焦一次
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0x01:
mCamera.autoFocus(new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
}
});
mHandler.sendEmptyMessageDelayed(0x01,2*1000);
break;
default:
break;
}
}
mTextureview.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
initCamera();
initCameraConfig();
try {
mCamera.setPreviewTexture(surface);
mCamera.startPreview();
mHandler.sendEmptyMessage(0x01);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
});
Android 开发 Camera1_如何使用对焦功能的更多相关文章
- Android 开发自己的网络收音机1——功能要求及设计方案
最近打算利用业余时间,编写一个Android的网络收音机.因为我自己偶尔也喜欢听听广播,所以打算用业余时间编写一个网络版收音机.说起收音机,其实在工作中已经编写过一个,不过那个收音机是需要硬件支持,也 ...
- Android 开发 框架系列 OkHttp文件下载功能实现(含断点续传)
前言 此篇博客只是下载功能的记录demo,如果你还不太了解okhttp可以参考我的另一篇博客https://www.cnblogs.com/guanxinjing/p/9708575.html 代码部 ...
- Android开发-记账本-实现记账功能选择
制作GridView适配器,实现页面数据的变化 制作类型存储数据库,存储的主要是图片类型,类型被选中时的图片,类型未被选中时的图片. 数据库代码如下 package com.example.Utils ...
- Android开发之自己主动登录功能的实现
在我们平时使用的手机应用都能够实现仅仅须要登陆一次账号后,第二次进入应用直接跳转到效果界面的效果,还有QQ的登陆框是怎样记忆我们的隐身登陆,保存账号选项的呢,这些都是通过使用SharedPrefere ...
- android 开发 View _9_ 实现渐变功能(直线与圆形)
参考博客:https://blog.csdn.net/iispring/article/details/50500106/ android颜色渐变的分类有: LinearGradient线性渐变 线性 ...
- Android开发之实现锁屏功能
锁屏须要引入设备超级管理员.在文档Android开发文档的Administration中有具体的说明. Android设备管理系统功能和控制訪问. 主要有一下几个步骤: 1 创建广播接收者,实现De ...
- android 开发 讯飞语音唤醒功能
场景:进入程序后处于语音唤醒状态,当说到某个关键词的时候打开某个子界面(如:语音识别界面) 技术要点: 1. // 设置唤醒一直保持,直到调用stopListening,传入0则完成一次唤醒后,会话立 ...
- android 开发 View _1_ View的子类们 和 视图坐标系图
目录: android 开发 View _2_ View的属性动画ObjectAnimator ,动画效果一览 android 开发 View _3_ View的属性动画ValueAnimator a ...
- Android 开发自己的网络收音机4——读取XML文件的电台数据
国内外的电台数据很多,起码有好几百,所以把这些数据都写到代码里面是不实际的.只能写成一个数据文件,程序启动的时候再去加载.保存这些简单数据,我们肯定会优先使用XML文件,今天讲讲如何读取XML里面的数 ...
随机推荐
- 如何将Canvas中内容保存为图片
Bitmap bm = Bitmap.createBitmap(320, 480, Config.ARGB_8888); Canvas canvas = new Canvas(bm); Paint p ...
- spring 配置bean以及配置依赖 (2)
目录 一.使用ref引用其他对象 二.通过有参构造器创建对象 1 通过index精确定位参数顺序 三.引用bean 1 使用内部bean 2 使用list,set 3 声明集合类型 四.其他 1 使用 ...
- Codeforces 479【B】div3
题目链接: http://codeforces.com/problemset/problem/977/B 题意:字符串,找固定长度为2的重复子串出现次数最多的. 题解:我暴力做的.暴力出奇迹. #in ...
- HTTP协议:响应消息
一.请求消息:客户端发送给服务器端的数据 数据格式: 1.请求行 2.请求头 3.请求空行 4.请求体 二.响应消息:服务器端发送给客户的数据 数据格式: 1.响应行: 1.组成:协议/版本 响应状态 ...
- php 执行mysql inset 指令无效
网数据库里插入一条 inset into je_user("name","va") values("df","12"), ...
- Winform打包工具SetupFactory 9 的使用 (转)
写了个WinForm的小程序..以前没打过包..只是直接把Bin里的东西复制出来使用..自己使用是足够.但是发给别人毕竟不太好看(不牛逼)..所以就想着打包.. Vs2012自带的有打包的功能..相信 ...
- jquery中on绑定click事件在苹果手机中不起作用
写一个div当做了一个按钮来使用. <div class="button"> <div class="sure"> 确定 </di ...
- 幂等 zuul的Filter实现
通过zuul的过滤器 filter实现 //app 幂等过滤 @SuppressWarnings("all") @Order(Ordered.HIGHEST_PRECEDENCE) ...
- Android开发 SeekBar开发记录
前言 开发记录博客不是讲解使用博客,更多的是各种功能与点子的记录 基本使用 <SeekBar android:layout_width="match_parent" andr ...
- git 去除本地所有没有保存的修改
git 去除本地所有没有保存的修改,参考How do I revert all local changes in Git managed project to previous state? 知道运行 ...