码迷,mamicode.com
首页 > 移动开发 > 详细

Android 开发 Camera1_如何使用自动对焦功能

时间:2019-06-06 18:50:26      阅读:779      评论:0      收藏:0      [点我收藏+]

标签:注意   hat   err   功能   OLE   llb   camera   预览   default   

前言

  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_如何使用自动对焦功能

标签:注意   hat   err   功能   OLE   llb   camera   预览   default   

原文地址:https://www.cnblogs.com/guanxinjing/p/10986249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!