ZoomGestureDetector


@RequiresApi(value = 21)
class ZoomGestureDetector


Detector that interprets MotionEvents and notify users when a zooming gesture has occurred.

To use this class to do pinch-to-zoom on the viewfinder:

import androidx.camera.viewfinder.core.ZoomGestureDetector
import androidx.camera.viewfinder.core.ZoomGestureDetector.ZoomEvent

val zoomGestureDetector = ZoomGestureDetector(context) { zoomEvent ->
    when (zoomEvent) {
        is ZoomEvent.Move -> {
            val zoomState = camera.cameraInfo.zoomState.value!!
            val ratio = zoomState.zoomRatio * zoomEvent.scaleFactor
            val minRatio = zoomState.minZoomRatio
            val maxRatio = zoomState.maxZoomRatio
            val clampedRatio = min(max(ratio, minRatio), maxRatio)
            camera.cameraControl.setZoomRatio(clampedRatio)
        }

        is ZoomEvent.Begin -> {
            // Handle the begin event. For example, determine whether this gesture
            // should be processed further.
        }

        is ZoomEvent.End -> {
            // Handle the end event. For example, show a UI indicator.
        }
    }
    true
}

return zoomGestureDetector.onTouchEvent(event)

Summary

Nested types

The listener for receiving notifications when gestures occur.

The zoom event that contains extended info about event state.

The beginning of a zoom gesture.

The end of a zoom gesture.

The moving events of a gesture in progress.

Public constructors

ZoomGestureDetector(
    context: Context,
    spanSlop: @Px Int,
    minSpan: @Px Int,
    listener: ZoomGestureDetector.OnZoomGestureListener
)

Creates a ZoomGestureDetector for detecting zooming gesture.

Public functions

Boolean

Accepts MotionEvents and dispatches events to a OnZoomGestureListener when appropriate.

Public properties

Boolean

Whether the quick zoom gesture, in which the user performs a double tap followed by a swipe, should perform zooming.

Boolean

Whether the stylus zoom gesture, in which the user uses a stylus and presses the button, should perform zooming.

Long

Public constructors

ZoomGestureDetector

Added in 1.4.0-alpha06
ZoomGestureDetector(
    context: Context,
    spanSlop: @Px Int = ViewConfiguration.get(context).scaledTouchSlop * 2,
    minSpan: @Px Int = DEFAULT_MIN_SPAN,
    listener: ZoomGestureDetector.OnZoomGestureListener
)

Creates a ZoomGestureDetector for detecting zooming gesture.

Parameters
context: Context

The application context.

spanSlop: @Px Int = ViewConfiguration.get(context).scaledTouchSlop * 2

The distance in pixels touches can wander before a gesture to be interpreted as zooming.

minSpan: @Px Int = DEFAULT_MIN_SPAN

The distance in pixels between touches that must be reached for a gesture to be interpreted as zooming.

listener: ZoomGestureDetector.OnZoomGestureListener

The listener to receive the callback.

Public functions

onTouchEvent

Added in 1.4.0-alpha06
@UiThread
fun onTouchEvent(event: MotionEvent): Boolean

Accepts MotionEvents and dispatches events to a OnZoomGestureListener when appropriate.

Applications should pass a complete and consistent event stream to this method.

A complete and consistent event stream involves all MotionEvents from the initial MotionEvent.ACTION_DOWN to the final MotionEvent.ACTION_UP or MotionEvent.ACTION_CANCEL.

Parameters
event: MotionEvent

The event to process.

Returns
Boolean

true if the event was processed and the detector wants to receive the rest of the MotionEvents in this event stream. Return it in the View.onTouchEvent for a normal use case.

Public properties

isQuickZoomEnabled

Added in 1.4.0-alpha06
var isQuickZoomEnabledBoolean

Whether the quick zoom gesture, in which the user performs a double tap followed by a swipe, should perform zooming.

If not set, this is enabled by default.

isStylusZoomEnabled

Added in 1.4.0-alpha06
var isStylusZoomEnabledBoolean

Whether the stylus zoom gesture, in which the user uses a stylus and presses the button, should perform zooming.

If not set, this is enabled by default.

timeDelta

Added in 1.4.0-alpha06
val timeDeltaLong