Android 开发 Camera1_如何使用自动对焦功能
Posted guanxinjing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 开发 Camera1_如何使用自动对焦功能相关的知识,希望对你有一定的参考价值。
前言
Camera1的自动对焦有一些意想不到的使用方式,之前我一直以为开启自动对焦后摄像头会一直自动对焦,但是跟想的完全不一样.,其实并没有效果困扰了很久.
设置自动对焦Mode
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 就等于对焦一次.注意!是只对焦一次! 它不是一直在对焦!
实现主动对焦和被动对焦的思路
被动对焦的思路
被动对焦的思路很简单,用一个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_如何使用自动对焦功能的主要内容,如果未能解决你的问题,请参考以下文章