que personas persona llama facilmente facilidad distraen distrae con como ala android camera touch focus area

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