mirror of
https://github.com/SimpleMobileTools/Simple-Camera.git
synced 2025-02-02 08:16:44 +01:00
replace textureView click listener with manual touch events checking
This commit is contained in:
parent
1708bf562a
commit
bbe2ba171d
@ -30,6 +30,8 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
private val FOCUS_TAG = "focus_tag"
|
private val FOCUS_TAG = "focus_tag"
|
||||||
private val MAX_PREVIEW_WIDTH = 1920
|
private val MAX_PREVIEW_WIDTH = 1920
|
||||||
private val MAX_PREVIEW_HEIGHT = 1080
|
private val MAX_PREVIEW_HEIGHT = 1080
|
||||||
|
private val CLICK_MS = 250
|
||||||
|
private val CLICK_DIST = 20
|
||||||
|
|
||||||
private lateinit var mActivity: MainActivity
|
private lateinit var mActivity: MainActivity
|
||||||
private lateinit var mTextureView: AutoFitTextureView
|
private lateinit var mTextureView: AutoFitTextureView
|
||||||
@ -38,8 +40,9 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
private var mRotationAtCapture = 0
|
private var mRotationAtCapture = 0
|
||||||
private var mZoomLevel = 1
|
private var mZoomLevel = 1
|
||||||
private var mZoomFingerSpacing = 0f
|
private var mZoomFingerSpacing = 0f
|
||||||
private var mLastClickX = 0f
|
private var mDownEventAtMS = 0L
|
||||||
private var mLastClickY = 0f
|
private var mDownEventAtX = 0f
|
||||||
|
private var mDownEventAtY = 0f
|
||||||
private var mIsFlashSupported = true
|
private var mIsFlashSupported = true
|
||||||
private var mIsZoomSupported = true
|
private var mIsZoomSupported = true
|
||||||
private var mIsImageCaptureIntent = false
|
private var mIsImageCaptureIntent = false
|
||||||
@ -72,18 +75,21 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
|
|
||||||
mTextureView.setOnTouchListener { view, event ->
|
mTextureView.setOnTouchListener { view, event ->
|
||||||
if (event.action == MotionEvent.ACTION_DOWN) {
|
if (event.action == MotionEvent.ACTION_DOWN) {
|
||||||
mLastClickX = event.x
|
mDownEventAtMS = System.currentTimeMillis()
|
||||||
mLastClickY = event.y
|
mDownEventAtX = event.x
|
||||||
|
mDownEventAtY = event.y
|
||||||
|
} else if (event.action == MotionEvent.ACTION_UP) {
|
||||||
|
if (System.currentTimeMillis() - mDownEventAtMS < CLICK_MS &&
|
||||||
|
Math.abs(event.x - mDownEventAtX) < CLICK_DIST &&
|
||||||
|
Math.abs(event.y - mDownEventAtY) < CLICK_DIST) {
|
||||||
|
focusArea(event.x, event.y)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mIsZoomSupported && event.pointerCount > 1) {
|
if (mIsZoomSupported && event.pointerCount > 1) {
|
||||||
handleZoom(event)
|
handleZoom(event)
|
||||||
}
|
}
|
||||||
false
|
true
|
||||||
}
|
|
||||||
|
|
||||||
mTextureView.setOnClickListener {
|
|
||||||
focusArea()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -417,8 +423,8 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
}
|
}
|
||||||
|
|
||||||
// inspired by https://gist.github.com/royshil/8c760c2485257c85a11cafd958548482
|
// inspired by https://gist.github.com/royshil/8c760c2485257c85a11cafd958548482
|
||||||
private fun focusArea() {
|
private fun focusArea(x: Float, y: Float) {
|
||||||
mActivity.drawFocusCircle(mLastClickX, mLastClickY)
|
mActivity.drawFocusCircle(x, y)
|
||||||
|
|
||||||
val captureCallbackHandler = object : CameraCaptureSession.CaptureCallback() {
|
val captureCallbackHandler = object : CameraCaptureSession.CaptureCallback() {
|
||||||
override fun onCaptureCompleted(session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult) {
|
override fun onCaptureCompleted(session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult) {
|
||||||
@ -441,7 +447,7 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
|
|
||||||
// touch-to-focus inspired by OpenCamera
|
// touch-to-focus inspired by OpenCamera
|
||||||
if (characteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AF) >= 1) {
|
if (characteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AF) >= 1) {
|
||||||
val focusArea = getFocusArea()
|
val focusArea = getFocusArea(x, y)
|
||||||
val sensorRect = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE)
|
val sensorRect = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE)
|
||||||
val meteringRect = convertAreaToMeteringRectangle(sensorRect, focusArea)
|
val meteringRect = convertAreaToMeteringRectangle(sensorRect, focusArea)
|
||||||
set(CaptureRequest.CONTROL_AF_REGIONS, arrayOf(meteringRect))
|
set(CaptureRequest.CONTROL_AF_REGIONS, arrayOf(meteringRect))
|
||||||
@ -481,8 +487,8 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
return Rect(left, top, right, bottom)
|
return Rect(left, top, right, bottom)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getFocusArea(): FocusArea {
|
private fun getFocusArea(x: Float, y: Float): FocusArea {
|
||||||
val coords = floatArrayOf(mLastClickX, mLastClickY)
|
val coords = floatArrayOf(x, y)
|
||||||
calculateCameraToPreviewMatrix()
|
calculateCameraToPreviewMatrix()
|
||||||
mPreviewToCameraMatrix.mapPoints(coords)
|
mPreviewToCameraMatrix.mapPoints(coords)
|
||||||
val focusX = coords[0].toInt()
|
val focusX = coords[0].toInt()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user