android - personas - La cámara AF_TRIGGER_START no comienza a enfocarse en tocar
como se llama ala persona que se distrae facilmente (2)
Bifurqué del ejemplo de Camera2Basic de Google y lo cambié para usar CaptureRequest.CONTROL_AF_MODE_AUTO
lugar de CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE
Puede tomar el proyecto de git y probarlo - https://github.com/pinhassi/android-Camera2Basic
tengo una aplicación de cámara que utiliza Api de cámara2, lo implementé en TouchListener para el TextureView que uso para Vista previa desde la cámara, lo que quiero es cuando un usuario toca la pantalla para poder enfocar esa área exactamente como la cámara de Android incorporada. No sé lo que está pasando, funciona cuando uso AF_MODE_AUTO pero no es preciso, solo enfoca lo que está en el centro de la pantalla.
Aquí está mi código:
mTextureView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
Rect rect = cameraCharacteristics
.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
Size size = cameraCharacteristics
.get(CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE);
int areaSize = 200;
int right = rect.right;
int bottom = rect.bottom;
int viewWidth = mTextureView.getWidth();
int viewHeight = mTextureView.getHeight();
int ll,
rr;
Rect newRect;
int centerX = (int) event.getX();
int centerY = (int) event.getY();
ll = ((centerX * right) - areaSize) / viewWidth;
rr = ((centerY * bottom) - areaSize) / viewHeight;
int focusLeft = clamp(ll, 0, right);
int focusBottom = clamp(rr, 0, bottom);
newRect = new Rect(focusLeft, focusBottom, focusLeft
+ areaSize, focusBottom + areaSize);
MeteringRectangle meteringRectangle = new MeteringRectangle(
newRect, 500);
MeteringRectangle[] meteringRectangleArr = { meteringRectangle };
System.out.println("metering rectARR" + meteringRectangleArr);
mPreviewCaptureRequestBuilder.set(
CaptureRequest.CONTROL_AF_TRIGGER,
CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
mPreviewCaptureRequestBuilder.set(
CaptureRequest.CONTROL_AF_REGIONS,
meteringRectangleArr);
mPreviewCaptureRequestBuilder.set(
CaptureRequest.CONTROL_AF_TRIGGER,
CameraMetadata.CONTROL_AF_TRIGGER_START);
try {
mCameraCaptureSession.setRepeatingRequest(
mPreviewCaptureRequest,
mSessionCaptureCallback,
mBackgroundHandler);
} catch (CameraAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
return true;
}
});
}
CaptureSession.capture(mPreviewCaptureRequestBuilder.build(),mCallback,mHandler)
llamar a CaptureSession.capture(mPreviewCaptureRequestBuilder.build(),mCallback,mHandler)
después de establecer CONTROL_AF_TRIGGER_CANCEL en CaptureRequest.Builder
mPreviewCaptureRequestBuilder.set(
CaptureRequest.CONTROL_AF_TRIGGER,
CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
//TODO call capture
//TODO set new focus region
//TODO call capture/setRepeatingRequest