通过触摸Android设置手动对焦

Raj*_*epe 8 android android-camera

我打算通过打开相机来设置我的Android应用程序,并通过触摸相机中的点来启用手动对焦.相机可以重新聚焦到我指向屏幕的位置.您能告诉我方法或应该从哪个组件开始修改吗?

以下是我的代码:

public void takePhoto(File photoFile, String workerName, int width, int height, int quality) {
    if (getAutoFocusStatus()){
        camera.autoFocus(new AutoFocusCallback() {
            @Override
            public void onAutoFocus(boolean success, Camera camera) {
                camera.takePicture(shutterCallback, rawCallback, jpegCallback);
            }
        }); 
    }else{
        camera.takePicture(shutterCallback, rawCallback, jpegCallback);
    }

this.photoFile = photoFile;
this.workerName = workerName;
this.imageOutputWidth = width;
this.imageOutputHeight = height;
}

public void takePhoto(File photoFile, int width, int height, int quality) {
takePhoto(photoFile, null, width, height, quality);
}
Run Code Online (Sandbox Code Playgroud)

Nli*_*ott 13

虽然这个答案没有显示如何专注于单个区域,但它绝对有助于展示如何完全聚焦相机.

这就是我所做的.这适用于我的设备(HTC的Droid DNA),内置于Android Studio

在这两个OnSurfaceChanged()OnSurfaceCreated()我有以下代码:(mCamera是我的私人Camera物件)

        mCamera.stopPreview();
        Camera.Parameters p = mCamera.getParameters();
        p.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);

        mCamera.setParameters(p);
        mCamera.setPreviewDisplay(surfaceHolder);
        mCamera.startPreview();
        mCamera.autoFocus(null);
Run Code Online (Sandbox Code Playgroud)

在构造函数中,您必须放置

        setFocusable(true);
        setFocusableInTouchMode(true);
Run Code Online (Sandbox Code Playgroud)

这将允许您接收焦点事件.至于捕捉它们......

 public boolean onTouchEvent(MotionEvent event){
    if(event.getAction() == MotionEvent.ACTION_DOWN){
        Log.d("down", "focusing now");

        mCamera.autoFocus(null); 
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)