如何监控android Camera的当前FocalLength

eri*_*rik 0 android android-camera

我有一个SurfaceView拥有相机预览.我已将相机对焦模式设置为:Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO

并添加了一个AutoFocus回调.当我运行应用程序时,我可以看到相机实时调整其焦点,但autoFocusCallback只会被触发一次,当它发生时,它总是返回相同的值.(2.95)无论我来自焦点对象有多近或多远.

想知道我做错了什么..是否有可能获得实际焦距是什么的实时信息?

我的SurfaceView,onSurfaceChanged代码:

SurfaceHolder.Callback surfaceHolderListener = new SurfaceHolder.Callback() {

            public void surfaceCreated(SurfaceHolder holder) {
                camera=Camera.open();
            try {
                camera.setPreviewDisplay(previewHolder);
               camera.setDisplayOrientation(90);

            }
                catch (Throwable e){ }
            }
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
            {

                Parameters params = camera.getParameters();
               Rect centralFocusArea = new Rect();
               centralFocusArea.set(holder.getSurfaceFrame().width()/2-10, holder.getSurfaceFrame().height()/2-10, holder.getSurfaceFrame().width()/2+10, holder.getSurfaceFrame().height()/2+10);

               ArrayList<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
               focusAreas.add(new Camera.Area(centralFocusArea, 1000));

                //params.setPreviewSize(width, height);
                params.setPictureFormat(PixelFormat.JPEG);
                params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
               // params.setFocusAreas(focusAreas);
                camera.setParameters(params);

                camera.startPreview();
                camera.autoFocus(new AutoFocusCallback() {

                    @Override
                    public void onAutoFocus(boolean success, Camera camera) {
                        // TODO Auto-generated method stub
                        Log.v("CAMERA", "FOCUS CHANGE:"+camera.getParameters().getFocalLength());
                        camera.getParameters().setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);

                    }
                });

            }
            public void surfaceDestroyed(SurfaceHolder arg0)
            {
                camera.stopPreview();
                camera.release();
            }

        };
Run Code Online (Sandbox Code Playgroud)

Poi*_*ana 7

也许你会混淆两个不同的概念:焦距焦距.

您似乎对焦距,即光学系统具有完美焦距的距离感兴趣; 这取决于您在焦点对象中的距离或距离.

相反,焦距 是光学系统(即相机镜头)的固有特性,并且它固定在大多数标准移动设备中(需要光学变焦能力以具有可变焦距).您获得的值2.95是相机的焦距(以毫米为单位).Nexus 7 2013平板电脑具有这样的焦距.

因此,函数getFocalLength()始终为您提供相同的值是完全正常的.