android自动对焦第一次对焦,实现Android手机摄像头的自动对焦详解
如何实现Android相机的自动对焦,而且是连续自动对焦的。当然直接调用系统相机就不用说了,那个很简单的。下面我们主要来看看如如何自己实现一个相机,并且实现自动连续对焦。
代码如下:
public class MainActivity extends Activity {
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private boolean flag = false;
private String fileUrl="";
Camera camera;
Camera.Parameters parameters;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
Button button=(Button) findViewById(R.id.takepicture);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.setKeepScreenOn(true);
surfaceView.setFocusable(true);
surfaceView.setBackgroundColor(TRIM_MEMORY_BACKGROUND);
surfaceHolder.addCallback(new Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera.stopPreview();
camera.release();
camera=null;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
if(null==camera){
camera=Camera.open();
try {
camera.setPreviewDisplay(surfaceHolder);
initCamera();
camera.startPreview();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
//实现自动对焦
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
if(success){
initCamera();//实现相机的参数初始化
camera.cancelAutoFocus();//只有加上了这一句,才会自动对焦。
}
}
});
}
});
}
//相机参数的初始化设置
private void initCamera()
{
parameters=camera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
//parameters.setPictureSize(surfaceView.getWidth(), surfaceView.getHeight()); // 部分定制手机,无法正常识别该方法。
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);//1连续对焦
setDispaly(parameters,camera);
camera.setParameters(parameters);
camera.startPreview();
camera.cancelAutoFocus();// 2如果要实现连续的自动对焦,这一句必须加上
}
//控制图像的正确显示方向
private void setDispaly(Camera.Parameters parameters,Camera camera)
{
if (Integer.parseInt(Build.VERSION.SDK) >= 8){
setDisplayOrientation(camera,90);
}
else{
parameters.setRotation(90);
}
}
//实现的图像的正确显示
private void setDisplayOrientation(Camera camera, int i) {
Method downPolymorphic;
try{
downPolymorphic=camera.getClass().getMethod("setDisplayOrientation", new Class[]{int.class});
if(downPolymorphic!=null) {
downPolymorphic.invoke(camera, new Object[]{i});
}
}
catch(Exception e){
Log.e("Came_e", "图像出错");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
android自动对焦第一次对焦,实现Android手机摄像头的自动对焦详解相关推荐
- android系统的手机文件夹目录详解
android系统的手机文件夹目录详解 一.文件夹 1./acct/ 系统回收站,删除的系统文件. 2./cache/ 缓存 3. /data/ 用户的所有程序相关数据 ...
- Android之手机文件夹目录详解
android系统的手机文件夹目录详解 一.文件夹 1./acct/ 系统回收站,删除的系统文件. 2./cache/ 缓存 3./data/ 用户的所有程序相关数据 app/ ...
- 红米3 android 版本,红米3四款手机有什么不同?红米3系列手机各版本区别详解
近日,红米手机3的指纹识别升级版本通过工信部认证正式亮相.今天红米3系列产品再次亮相工信部.加上此前亮相的红米3指纹识别升级 版,如今工信部认证中共有4款红米3系列的手机.分别是2015810/201 ...
- Android四大组件之——Activity的生命周期(图文详解)
转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai 联系方式:JohnTsai.Work@gmail.com [Andro ...
- android相册和拍照并裁剪图片大小,Android 拍照并对照片进行裁剪和压缩实例详解...
Android 拍照并对照片进行裁剪和压缩实例详解 本文主要介绍 Android 调用摄像头拍照并对照片进行裁剪和压缩,文中给出了主要步骤和关键代码. 调用摄像头拍照,对拍摄照片进行裁剪,代码如下. ...
- Android基础入门教程——2.3.1 TextView(文本框)详解
Android基础入门教程--2.3.1 TextView(文本框)详解 标签(空格分隔): Android基础入门教程 本节引言: 学习完Android中的六大布局,从本节开始我们来一个个讲解And ...
- Android studio 多渠道(多环境)打包grade配置详解
Android studio 多渠道(多环境)打包grade配置详解 场景:开发app,我们需要两套环境或者两套环境以上的apk,每套环境的apk分两个版本debug版和release版. 公司有套平 ...
- Android Studio CPU profiler性能分析工具介绍和使用详解
Android Studio CPU profiler性能分析工具介绍和使用详解 CPU profiler介绍 Android Studio CPU 性能剖析器可实时检查应用的 CPU 使用率和线程活 ...
- android自定义圆角进度条,Android自定义进度条的圆角横向进度条实例详解
1.本文将向你介绍自定义进度条的写法,比较简单,但还是有些知识点是需要注意的: invalidate()方法 RectF方法的应用 onMeasure方法的应用 2.原理 画3层圆角矩形,底层为黑色, ...
最新文章
- 【7.9 讲座直播】纳米孔靶向测序技术在新型冠状病毒与常见呼吸道病毒快速诊断中的应用...
- C++:uniform_int_distribution、rand()和mt19937随机数、partial_sum、容器最小值和最大值、accumulate
- htmlparser操作bean类提取html页面元素
- VM之Linux:Linux的Ubuntu中,解决安装后屏幕太小的问题
- redis 怎么关闭写盘_Redis持久化策略
- pc网站和移动网站在同一服务器吗,机动都市阿尔法PC服和移动服互通吗
- Java 装箱和拆箱
- Nginx的五大应用场景详解
- 用jframe给MySQL输入数据_如何从JTextField输入Info到sql数据库?
- 剑指前端(前端入门笔记系列)——Date对象
- 客户机操作系统已禁用 cpu_强实时工业互联网虚拟化操作系统Intewell
- Centos7系统安装riscv-spike
- pe如何自动加载外置工具_[分享] PE自动检测安装驱动 外置组件[01-17更新]
- 爱词霸翻译接口 破解
- Ubuntu 图标主题 Nitrux 升级
- 美爆!《自然》公布2018年19张最震撼的科学图片
- 计算机无法继续安装程序,解决方法:如果计算机继续无法安装图形驱动程序,该怎么办...
- eclipse和vs2010 (visual studio)和BBEdit自动排版快捷键(auto format shortcuts)
- 用精密减压阀控制空气采样泵气体压力
- 智联卓聘 卓聘聊聊(IM)开发实践
热门文章
- HTML语言写邮件,使用HTML编写简单的邮件模版
- 网上国网 2.3.0 encryptData 用电app逆向研究
- 备份你QQ的重要数据(转)
- jetson电脑远程控制-todesk
- python安装模块的2种基本方式
- bash 下载google云盘文件
- java后台 amr格式音频转为mp3格式
- 从零开始手把手教你使用javascript+canvas开发一个塔防游戏02敌人自动寻路
- select函数中的坑(C语言)
- 作别硬件拼杀时代,PPTV电视能否靠“内容”决胜千里?