java定焦点_Android 开发 Camera1_如何使用对焦功能
前言
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_如何使用对焦功能的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: java 线程分配_Java多线程原子引
- 下一篇: android自定义progressba