Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sephiroth74/AndroidUIGestureRecognizer
AndroidGestureRecognizer is an Android implementation of the Apple's UIGestureRecognizer framework
https://github.com/sephiroth74/AndroidUIGestureRecognizer
android apple-uigesturerecognizer-framework gesture-changes gesture-recognizer rotation swipe tap touches uigesturerecognizer
Last synced: 3 months ago
JSON representation
AndroidGestureRecognizer is an Android implementation of the Apple's UIGestureRecognizer framework
- Host: GitHub
- URL: https://github.com/sephiroth74/AndroidUIGestureRecognizer
- Owner: sephiroth74
- License: mit
- Created: 2016-11-18T01:47:52.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2024-03-15T07:25:53.000Z (11 months ago)
- Last Synced: 2024-03-15T10:55:33.516Z (11 months ago)
- Topics: android, apple-uigesturerecognizer-framework, gesture-changes, gesture-recognizer, rotation, swipe, tap, touches, uigesturerecognizer
- Language: Kotlin
- Size: 10.6 MB
- Stars: 134
- Watchers: 7
- Forks: 24
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome - AndroidUIGestureRecognizer - AndroidGestureRecognizer is an Android implementation of the Apple's UIGestureRecognizer framework (uigesturerecognizer)
- awesome - AndroidUIGestureRecognizer - AndroidGestureRecognizer is an Android implementation of the Apple's UIGestureRecognizer framework (touches)
README
# Android UIGestureRecognizer
[![](https://jitpack.io/v/sephiroth74/AndroidUIGestureRecognizer.svg)](https://jitpack.io/#sephiroth74/AndroidUIGestureRecognizer)
AndroidGestureRecognizer is an Android implementation of the Apple's UIGestureRecognizer framework (
Reverse engineered).
https://developer.apple.com/reference/uikit/uigesturerecognizerFor more info about the ui gesture recognizers look this WWDC
video [https://developer.apple.com/videos/play/wwdc2012/233/](https://developer.apple.com/videos/play/wwdc2012/233)### From Apple API reference:
> UIGestureRecognizer is an abstract base class for concrete gesture-recognizer classes. A
> gesture-recognizer object—or, simply, a gesture recognizer—decouples the logic for recognizing a
> gesture and acting on that recognition. When one of these objects recognizes a common gesture or, in
> some cases, a change in the gesture, it sends an action message to each designated target object.# Available Recognizers
* [UITapGestureRecognizer](https://developer.apple.com/reference/uikit/uitapgesturerecognizer)
> UIGestureRecognizer that looks for single or multiple taps. For the gesture to be recognized, the
> specified number of fingers must tap the view a specified number of times.* [UIPinchGestureRecognizer](https://developer.apple.com/reference/uikit/uipinchgesturerecognizer)
> Pinching is a continuous gesture. The gesture begins (began) when the two touches have moved
> enough to be considered a pinch gesture. The gesture changes (changed) when a finger moves (with
> both fingers remaining pressed). The gesture ends (ended) when both fingers lift from the view.* [UIRotationGestureRecognizer](https://developer.apple.com/reference/uikit/uirotationgesturerecognizer)
> Rotation is a continuous gesture. It begins when two touches have moved enough to be considered a
> rotation. The gesture changes when a finger moves while the two fingers are down. It ends when both
> fingers have lifted. At each stage in the gesture, the gesture recognizer sends its action message.* [UISwipeGestureRecognizer](https://developer.apple.com/reference/uikit/uiswipegesturerecognizer)
> UISwipeGestureRecognizer recognizes a swipe when the specified number of touches (
> numberOfTouchesRequired) have moved mostly in an allowable direction (direction) far enough to be
> considered a swipe. Swipes can be slow or fast. A slow swipe requires high directional precision but
> a small distance; a fast swipe requires low directional precision but a large distance.* [UIPanGestureRecognizer](https://developer.apple.com/reference/uikit/uipangesturerecognizer)
> A panning gesture is continuous. It begins (began) when the minimum number of fingers allowed (
> minimumNumberOfTouches) has moved enough to be considered a pan. It changes (changed) when a finger
> moves while at least the minimum number of fingers are pressed down. It ends (ended) when all
> fingers are lifted.* [UIScreenEdgePanGestureRecognizer](https://developer.apple.com/reference/uikit/uiscreenedgepangesturerecognizer)
> A gesture recognizer that looks for panning (dragging) gestures that starts near the edge of the
> screen.
> The maximum distance between the screen edge can be changed overriding the resource dimension of
*gestures\_screen\_edge\_limit*.* [UILongPressGestureRecognizer](https://developer.apple.com/reference/uikit/uilongpressgesturerecognizer)
> Long-press gestures are continuous. The gesture begins (began) when the number of allowable
> fingers (numberOfTouchesRequired) have been pressed for the specified period (minimumPressDuration)
> and the touches do not move beyond the allowable range of movement (allowableMovement). The gesture
> recognizer transitions to the Change state whenever a finger moves, and it ends (ended) when any of
> the fingers are lifted.# Discrete vs Continuous
> The gesture interpreted by a gesture recognizer can be either discrete or continuous. A discrete
> gesture, such as a double tap, occurs but once in a multi-touch sequence and results in a single
> action sent. However, when a gesture recognizer interprets a continuous gesture such as a rotation
> gesture, it sends an action message for each incremental change until the multi-touch sequence
> concludes. (from https://developer.apple.com/reference/uikit/uigesturerecognizer)There are 2 types of UI GestureRecognizers: **UIContinuousRecognizer** and *
*UIDiscreteGestureRecognizer**#### UIDiscreteGestureRecognizer
Gesture Recognizers that implement this interface will only fire the `Ended` state change.
Internally they will switch between `Possible`, `Ended`, `Failed` or `Cancelled` state.#### UIContinuousRecognizer
A continuous gesture which will dispatch `Began`, `Changed` and `Ended` state changed events (for
instance a pinch gesture, or a rotate gesture).---
# Demo
Single Tap| Double Tap | Double Tap 2 Fingers
:---: | :---: | :--: |
| |
Logn Press| Long Press Double Tap
:---: | :---: |
|
Pan 1 Finger| Pan 2 Fingers
:---: | :---: |
|
Pinch|
:---: |
|
Rotate| Rotate min angle
:---: | :---: |
| |
Screen Edge 1 Finger| Screen Edge 2 Fingers
:---: | :---: |
|
Swipe Left 1 Finger | Swipe Left 2 Fingers
:------------------------------------------------------:| :---: |
|---
# Installation
### JitPack
**Step 1.** Add the JitPack repository to your build file:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}**Step 2.** Add the dependency to your project's build.gradle file:
dependencies {
implementation 'com.github.sephiroth74:AndroidUIGestureRecognizer:Tag'
}To See the last release version: https://jitpack.io/#sephiroth74/AndroidUIGestureRecognizer/
---
# Example
```java
class MainActivity :AppCompatActivity(){override fun onCreate(savedInstanceState:Bundle?){
...val delegate=UIGestureRecognizerDelegate();
// single tap gesture
val recognizer1=new UITapGestureRecognizer(this)
recognizer1.tapsRequired=1
recognizer1.touchesRequired=1
recognizer1.tag="single-tap";
recognizer1.actionListener=actionListener// double tap gesture
val recognizer2=UITapGestureRecognizer(this)
recognizer2.tag="double-tap"
recognizer2.tapsRequired=2
recognizer2.touchesRequired=1
recognizer2.actionListener=actionListener// We want to recognize a single tap and a double tap separately. Normally, when the user
// performs a double tap, the single tap would be triggered twice.
// In this way, however, the single tap will wait until the double tap will fail. So a single tap
// and a double tap will be triggered separately.
recognizer1.requireFailureOf=recognizer2// add both gestures to the delegate
delegate.addGestureRecognizer(recognizer)
delegate.addGestureRecognizer(recognizer2)// forward the touch events to the delegate
val rootView=findViewById(R.id.root)
rootView.setGestureDelegate(delegate)// optional delegate methods
delegate.shouldReceiveTouch={recognizer->true}
delegate.shouldBegin={recognizer->true}
delegate.shouldRecognizeSimultaneouslyWithGestureRecognizer={recognizer,other->true}
}// gesture recognizer actionlistener
private val actionListener={recognizer:UIGestureRecognizer->
// gesture recognized
}```
---