前言

Camera1的自动对焦还是有一些坑值得开一个篇幅来讲解,一般对焦Mode有以下几种:

Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO 连续自动对焦视频

Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE  连续自动对焦图像

Camera.Parameters.FOCUS_MODE_AUTO 自动对焦(单次)

检查支持的对焦Mode

有些时候前摄像头不支持一些对焦模式,所以我们在切换摄像头后配置摄像就需要检查一遍支持的对焦模式

List 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(newCamera.AutoFocusCallback() {

@Overridepublic void onAutoFocus(booleansuccess, Camera camera) {

}

});

注意!对焦是需要在预览开始之后才能调用的,否则报错.以上设置一次autoFocus 就等于对焦一次.注意!是只对焦一次! 它不是一直在对焦!

FLASH_MODE_AUTO实现主动对焦和被动对焦的思路

被动对焦的思路

被动对焦的思路很简单,用一个Button或者点击预览View进行一次对焦,所以,正常开发的情况下,需要使用一个布尔值来判断当前是不是在预览状态.

主动对焦

也很简单写一个Handler循环就行了,我下面的例子就是每隔2秒对焦一次

private Handler mHandler = newHandler(){

@Overridepublic voidhandleMessage(Message msg) {super.handleMessage(msg);switch(msg.what){case 0x01:

mCamera.autoFocus(newCamera.AutoFocusCallback() {

@Overridepublic void onAutoFocus(booleansuccess, Camera camera) {

}

});

mHandler.sendEmptyMessageDelayed(0x01,2*1000);break;default:break;

}

}

mTextureview.setSurfaceTextureListener(newTextureView.SurfaceTextureListener() {

@Overridepublic void onSurfaceTextureAvailable(SurfaceTexture surface, int width, intheight) {

initCamera();

initCameraConfig();try{

mCamera.setPreviewTexture(surface);

mCamera.startPreview();

mHandler.sendEmptyMessage(0x01);

}catch(IOException e) {

e.printStackTrace();

}

}

@Overridepublic void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, intheight) {

}

@Overridepublic booleanonSurfaceTextureDestroyed(SurfaceTexture surface) {return false;

}

@Overridepublic voidonSurfaceTextureUpdated(SurfaceTexture surface) {

}

});

java定焦点_Android 开发 Camera1_如何使用对焦功能相关推荐

  1. jni java返回数组_Android开发实践:Java层与Jni层的数组传递

    Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni ...

  2. android java 调用栈_Android开发中打印方法调用栈

    概要 在日常开发和debug的过程中,我们都需要看看某一个方法的调用StackTrace,如果是crash或者异常被抛出的情况下会直接看到对应的StackTrace,如: 39 5939 E Andr ...

  3. 安卓打开java文件管理器_Android开发之简单文件管理器实现方法

    本文实例讲述了Android开发之简单文件管理器实现方法.分享给大家供大家参考,具体如下: 这里运用Java I/O.ListActivity.Dialog.Bitmap等实现简单文件管理器,可以查看 ...

  4. android开发是java语言吗_android开发是用java语言吗?

    android开发的主流语言是java语言,但也可以使用其他语言,例可以通过Android NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程. Andro ...

  5. java android 数组_Android开发基础之Java 数组

    Java 数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java 语言中提供的数组是用来存储固定大小的同类型元素. 你可以声明一个数组变量,如 n ...

  6. java安卓字体_Android开发之字体设置

    一.前言: 1.默认字体 Android SDK自带了四种字体:"normal""monospace","sans", "seri ...

  7. java输出体重指数_Android开发–身高体重指数(BIM)计算–完成BMI程序 | 学步园...

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:修改表达用户界 ...

  8. java 彩信发送_Android实现发短信@彩信功能

    首先 activity_main.xml  布局: xmlns:tools="http://schemas.android.com/tools" android:layout_wi ...

  9. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

最新文章

  1. 马斯克近日表示:Neuralink脑机接口有望明年用于人类
  2. ITCAST视频-Spring学习笔记(使用JDK中的Proxy技术实现AOP功能)
  3. java适配器各三种_适配器三种
  4. linux终端密码星星,如何获得您的sudo密码在Ubuntu中显示为星号 | MOS86
  5. 【Flink】源码-Flink重启策略-简介 Task恢复策略 重启策略监听器
  6. memento about Linux
  7. ajax+php 实现即时聊天
  8. 集成AGC崩溃服务如何生成iOS符号文件表并上传
  9. 代码题(23)— 数组中的最长山脉
  10. woj 1567 - D - Sloth's Angry(贪心)
  11. mysql数据库innodb性能优化之缓冲池配置
  12. 批量改变图片尺寸大小的方法!一分钟搞定!
  13. 攒齐智能产品组合,世界召唤四大超级力量
  14. 麻雀如何变凤凰 by 网络雄猫
  15. Linux 新手必会的21条命令合集
  16. Anaconda python windows环境安装及完全排坑教程
  17. Python --- 笑脸检测+口罩人脸识别
  18. android 调用JNI SO动态库
  19. 安卓源码,跑步打卡项目app源码
  20. 麻将胡牌算法 极速(速度接近理论极限)

热门文章

  1. java检测安卓程序退出_java-我的Android应用程序的gameLoop线程在退出...
  2. gettimeofday
  3. 【工具】WPS安卓电脑无广告版
  4. 对于读取PDF模板表单,中文无序问题
  5. dotweb——go语言的一个微型web框架(二)启动dotweb
  6. Ubuntu 16.04调节屏幕显示字体大小
  7. 新时代,大数据战略和DevOps更配
  8. 【转】 Java中的变量赋值和参数传递
  9. 怎么用BarTender批量打印标签
  10. python leetcode 1