ZoomGestureDetector
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:
-
In the
OnZoomGestureListener.onZoomEvent, when receivingZoomEvent.Move, get theZoomEvent.Move.incrementalScaleFactorand use the value withCameraControl.setZoomRatioif the factor is in the range ofZoomState.getMinZoomRatioandZoomState.getMaxZoomRatio. Then create an instance of theZoomGestureDetectorwith theOnZoomGestureListener. -
In the
View.onTouchEvent, callonTouchEventand pass theMotionEvents to theZoomGestureDetector.
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.incrementalScaleFactor 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 |
|---|
fun interface ZoomGestureDetector.OnZoomGestureListenerThe listener for receiving notifications when gestures occur. |
abstract class ZoomGestureDetector.ZoomEventThe 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(Creates a ZoomGestureDetector for detecting zooming gesture. |
Public functions |
|
|---|---|
Boolean |
@UiThreadAccepts |
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
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
@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 |
|
Public properties
isQuickZoomEnabled
var isQuickZoomEnabled: Boolean
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
var isStylusZoomEnabled: Boolean
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.