Ich habe eine Kamera App mit camera2 Api, ich implementiert onTouchListener zu der TextureView ich für die Vorschau von der Kamera verwenden, was ich will ist, wenn ein Benutzer auf den Bildschirm, um sich darauf konzentrieren können Bereich genau wie die eingebaute Android-Kamera. Ich weiß nicht, was es falsch läuft, es funktioniert, wenn ich AF_MODE_AUTO verwende, aber es ist nicht präzise, es konzentriert sich nur darauf, was in der Mitte des Bildschirms ist.Kamera AF_TRIGGER_START startet nicht auf Touch
Hier ist es mein Code:
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;
}
});
}
Sie könnten 3A bis Auto setzen müssen: 'mPreviewCaptureRequestBuilder.set ( CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);' –