Gesture handling lets your app respond when users touch, swipe, or tap the screen. It makes apps interactive and fun to use.
Gesture handling in Android Kotlin
val gestureDetector = GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapUp(e: MotionEvent?): Boolean {
// Handle tap
return true
}
override fun onLongPress(e: MotionEvent?) {
// Handle long press
}
override fun onFling(e1: MotionEvent?, e2: MotionEvent?, velocityX: Float, velocityY: Float): Boolean {
// Handle swipe
return true
}
})
view.setOnTouchListener { v, event ->
gestureDetector.onTouchEvent(event)
true
}GestureDetector helps detect common gestures like tap, long press, and swipe.
Override only the gesture methods you need inside SimpleOnGestureListener.
override fun onSingleTapUp(e: MotionEvent?): Boolean {
Toast.makeText(context, "Tapped!", Toast.LENGTH_SHORT).show()
return true
}override fun onLongPress(e: MotionEvent?) {
Toast.makeText(context, "Long Pressed!", Toast.LENGTH_SHORT).show()
}override fun onFling(e1: MotionEvent?, e2: MotionEvent?, velocityX: Float, velocityY: Float): Boolean {
if (velocityX > 1000) {
Toast.makeText(context, "Swiped Right!", Toast.LENGTH_SHORT).show()
}
return true
}This app shows a full screen text. When you tap, long press, or swipe left or right on the text, it shows a small popup message describing the gesture.
class MainActivity : AppCompatActivity() { private lateinit var gestureDetector: GestureDetector override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val textView = TextView(this).apply { text = "Touch me" textSize = 24f gravity = Gravity.CENTER layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) } setContentView(textView) gestureDetector = GestureDetector(this, object : GestureDetector.SimpleOnGestureListener() { override fun onSingleTapUp(e: MotionEvent?): Boolean { Toast.makeText(this@MainActivity, "Tapped!", Toast.LENGTH_SHORT).show() return true } override fun onLongPress(e: MotionEvent?) { Toast.makeText(this@MainActivity, "Long Pressed!", Toast.LENGTH_SHORT).show() } override fun onFling(e1: MotionEvent?, e2: MotionEvent?, velocityX: Float, velocityY: Float): Boolean { if (velocityX > 1000) { Toast.makeText(this@MainActivity, "Swiped Right!", Toast.LENGTH_SHORT).show() } else if (velocityX < -1000) { Toast.makeText(this@MainActivity, "Swiped Left!", Toast.LENGTH_SHORT).show() } return true } }) textView.setOnTouchListener { _, event -> gestureDetector.onTouchEvent(event) true } } }
Always return true from gesture methods to indicate the event was handled.
Use setOnTouchListener on the view you want to detect gestures on.
GestureDetector simplifies detecting common gestures without manual calculations.
Gesture handling lets apps respond to user touches like taps, swipes, and long presses.
Use GestureDetector with SimpleOnGestureListener to detect gestures easily.
Attach a touch listener to your view and pass events to GestureDetector.