Package globus.glmap

Class GLMapGesturesDetector

java.lang.Object
globus.glmap.GLMapGesturesDetector
All Implemented Interfaces:
android.view.View.OnTouchListener

public class GLMapGesturesDetector extends Object implements android.view.View.OnTouchListener
Detector of gestures for map view
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    boolean
    Inverse one-finger zoom (tap-zoom) gesture direction.
  • Constructor Summary

    Constructors
    Constructor
    Description
    GLMapGesturesDetector(GLMapViewRenderer renderer, android.os.Handler handler)
    Default constructor
  • Method Summary

    Modifier and Type
    Method
    Description
    long
    Minimal speed to trigger fling event.
    long
    If last move event is older than the returned value, no fling events will be triggered.
    long
    Time to trigger long press.
    long
    getMaxTapsToDetect(int numberOfTouches)
    Maximum taps to detect for a given number of touches.
    long
    Time between taps.
    int
    Returns number of active touches
    float
    Returns the minimum distance (in screen points / dp) that any touch point needs to travel to start detecting a pitch gesture.
    float
    Pitch events are disabled if Y distance between fingers is more than the returned value.
    float
    Rotation starts when user rotates two fingers by more than the returned value.
    float
    Rotation resets if user rotates by an angle less than the gate.
    float
    Tap events are disabled if movement greater than the returned value is detected.
    float
    Tap events are disabled if zoom greater than the returned value is detected.
    float
    getTouchX(int index)
    Returns x coordinate of the touch
    float
    getTouchY(int index)
    Returns y coordinate of the touch
    void
    Called when new touch started.
    void
    Called when all touches ended.
    void
    onFling(float speedX, float speedY)
    Called when fling is detected.
    void
    onLongPress(int numberOfTouches, float cx, float cy)
    Called when long press detected.
    void
    onMove(float dx, float dy)
    Called when movement detected.
    void
    onPitch(float distance)
    Called when pitch gesture is detected.
    void
    onRotate(float delta, float cx, float cy)
    Called when rotation is detected.
    void
    Called when rotation reset happens
    void
    onTap(int numberOfTouches, int numberOfTaps, float cx, float cy)
    Called when tap detected.
    boolean
    onTouch(android.view.View v, android.view.MotionEvent motionEvent)
     
    void
    onZoom(float k, float cx, float cy)
    Called when zoom detected
    void
    Stop detecting pan until all current touches are up
    void
    Stop detecting taps until all current touches are up
    void
    Stop detecting touches until all current touches are up

    Methods inherited from class java.lang.Object

    equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • oneFingerZoomInverse

      public boolean oneFingerZoomInverse
      Inverse one-finger zoom (tap-zoom) gesture direction. true by default. When inverted — move up to zoom out, move down to zoom in.
  • Constructor Details

    • GLMapGesturesDetector

      public GLMapGesturesDetector(@NonNull GLMapViewRenderer renderer, @NonNull android.os.Handler handler)
      Default constructor
      Parameters:
      renderer - position, angle and zoom of this map will be modified by this detector
      handler - gesture handler
  • Method Details

    • stopDetectingTouches

      public void stopDetectingTouches()
      Stop detecting touches until all current touches are up
    • stopDetectingTaps

      public void stopDetectingTaps()
      Stop detecting taps until all current touches are up
    • stopDetectingPan

      public void stopDetectingPan()
      Stop detecting pan until all current touches are up
    • getTouchX

      public float getTouchX(int index)
      Returns x coordinate of the touch
      Parameters:
      index - index of touch
      Returns:
      x coordinate of touch (in pixels)
    • getTouchY

      public float getTouchY(int index)
      Returns y coordinate of the touch
      Parameters:
      index - index of touch
      Returns:
      y coordinate of touch (in pixels)
    • getNumberOfTouches

      public int getNumberOfTouches()
      Returns number of active touches
      Returns:
      number of active touches
    • onTap

      public void onTap(int numberOfTouches, int numberOfTaps, float cx, float cy)
      Called when tap detected. Default implementation performs zoom in on numberOfTouches == 1 and numberOfTaps == 2. Default implementation performs zoom out on numberOfTouches == 2 and numberOfTaps == 1.
      Parameters:
      numberOfTouches - number of touches
      numberOfTaps - number of taps
      cx - x coordinate of the touches center
      cy - y coordinate of the touches center
    • onLongPress

      public void onLongPress(int numberOfTouches, float cx, float cy)
      Called when long press detected. Default implementation does nothing
      Parameters:
      numberOfTouches - number of touches
      cx - x coordinate of the touches center
      cy - y coordinate of the touches center
    • onMove

      public void onMove(float dx, float dy)
      Called when movement detected. Default implementation moves map to new center without animation.
      Parameters:
      dx - movement distance over x axis (px)
      dy - movement distance over y axis (px)
    • onZoom

      public void onZoom(float k, float cx, float cy)
      Called when zoom detected
      Parameters:
      k - zoom coefficient
      cx - x coordinate of the touches center
      cy - y coordinate of the touches center
    • onFling

      public void onFling(float speedX, float speedY)
      Called when fling is detected. Default implementation starts deceleration animation.
      Parameters:
      speedX - speed over x axis (px/s)
      speedY - speed over y axis (px/s)
    • onRotate

      public void onRotate(float delta, float cx, float cy)
      Called when rotation is detected. Default implementation rotates the map with animation if delta is greater than the rotation gate.
      Parameters:
      delta - angle delta (in degrees)
      cx - x coordinate of rotation center (in pixels)
      cy - y coordinate of rotation center (in pixels)
    • onPitch

      public void onPitch(float distance)
      Called when pitch gesture is detected.
      Parameters:
      distance - distance of pitch gesture
    • onBegin

      public void onBegin()
      Called when new touch started. Default implementation does nothing.
    • onEnd

      public void onEnd()
      Called when all touches ended. Default implementation rotates map to 0 if current angle is in range 340 .. 20
    • onRotationReset

      public void onRotationReset()
      Called when rotation reset happens
    • getTapDistanceGate

      public float getTapDistanceGate()
      Tap events are disabled if movement greater than the returned value is detected. Default implementation returns 10.
      Returns:
      max move distance allowed for taps (in screen points / dp)
    • getPitchDistanceGate

      public float getPitchDistanceGate()
      Returns the minimum distance (in screen points / dp) that any touch point needs to travel to start detecting a pitch gesture. The detector accumulates touch movement until this threshold is met, then evaluates if it's a valid pitch gesture. Default implementation returns 30 points.
      Returns:
      minimum travel distance to initiate pitch gesture detection (in screen points / dp)
    • getPitchYDeltaGate

      public float getPitchYDeltaGate()
      Pitch events are disabled if Y distance between fingers is more than the returned value. Default implementation returns 100.
      Returns:
      max Y distance allowed for pitch gesture (in screen points / dp)
    • getTapZoomGate

      public float getTapZoomGate()
      Tap events are disabled if zoom greater than the returned value is detected. Default implementation returns 1.01f.
      Returns:
      max zoom allowed for taps
    • getRotationGate

      public float getRotationGate()
      Rotation starts when user rotates two fingers by more than the returned value. Default implementation returns 10.
      Returns:
      angle when map rotation starts (in degrees)
    • getRotationResetGate

      public float getRotationResetGate()
      Rotation resets if user rotates by an angle less than the gate.
      Returns:
      gate value for angle
    • getFlingTimeGate

      public long getFlingTimeGate()
      If last move event is older than the returned value, no fling events will be triggered. Default implementation returns 100000000.
      Returns:
      max time to trigger fling event (in nanoseconds)
    • getFlingSpeedGate

      public long getFlingSpeedGate()
      Minimal speed to trigger fling event. Default implementation returns 400.
      Returns:
      minimal speed to trigger fling event in px/s
    • getLongPressDuration

      public long getLongPressDuration()
      Time to trigger long press. Default implementation returns 500000000.
      Returns:
      time between taps (in nanoseconds)
    • getMultiTapTimeGate

      public long getMultiTapTimeGate()
      Time between taps. Default implementation returns 350000000.
      Returns:
      time between taps (in nanoseconds)
    • getMaxTapsToDetect

      public long getMaxTapsToDetect(int numberOfTouches)
      Maximum taps to detect for a given number of touches. Default implementation returns 2 for 1 touch and 1 for others.
      Parameters:
      numberOfTouches - number of touches
      Returns:
      number of taps to detect
    • onTouch

      public boolean onTouch(android.view.View v, android.view.MotionEvent motionEvent)
      Specified by:
      onTouch in interface android.view.View.OnTouchListener