ওভারভিউ
এই টিউটোরিয়ালে GestureDetector ব্যবহার করে ফ্লিং (swipe) জেসচার ডিটেক্ট করার পদ্ধতি দেখানো হয়েছে।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি
ধাপ ২: activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="4dp"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:background="#008080"
android:padding="5dp"
android:text="TutorialsPoint"
android:textColor="#fff"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Fling Gesture"
android:textColor="@color/colorAccent"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>
ধাপ ৩: MainActivity.kt
import android.os.Bundle
import android.view.GestureDetector
import android.view.MotionEvent
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity(), GestureDetector.OnGestureListener {
private lateinit var gestureDetector: GestureDetector
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "Fling Gesture Demo"
gestureDetector = GestureDetector(this, this)
}
// টাচ ইভেন্ট জেসচার ডিটেক্টরকে দিয়ে দিন
override fun onTouchEvent(event: MotionEvent): Boolean {
return gestureDetector.onTouchEvent(event) || super.onTouchEvent(event)
}
// OnGestureListener ইন্টারফেসের মেথডগুলো
override fun onDown(e: MotionEvent): Boolean = true // true রিটার্ন করতে হবে যাতে অন্য ইভেন্ট কাজ করে
override fun onShowPress(e: MotionEvent) {}
override fun onSingleTapUp(e: MotionEvent): Boolean = false
override fun onScroll(e1: MotionEvent, e2: MotionEvent, distanceX: Float, distanceY: Float): Boolean = false
override fun onLongPress(e: MotionEvent) {}
override fun onFling(e1: MotionEvent, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
Toast.makeText(applicationContext, "Fling Gesture Detected!", Toast.LENGTH_SHORT).show()
return true
}
}
ধাপ ৪: AndroidManifest.xml
স্ট্যান্ডার্ড কনফিগারেশন। কোনো স্পেশাল পারমিশন প্রয়োজন নেই।
উন্নত ফ্লিং ডিটেকশন (দিক নির্দিষ্ট করে)
বাম-ডান বা উপর-নিচের সুইপ আলাদা করতে চাইলে:
private val SWIPE_THRESHOLD = 100
private val SWIPE_VELOCITY_THRESHOLD = 100
override fun onFling(e1: MotionEvent, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
val diffX = e2.x - e1.x
val diffY = e2.y - e1.y
if (abs(diffX) > abs(diffY)) { // অনুভূমিক সুইপ
if (abs(diffX) > SWIPE_THRESHOLD && abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight()
} else {
onSwipeLeft()
}
return true
}
} else { // লম্বাংশ সুইপ
if (abs(diffY) > SWIPE_THRESHOLD && abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeDown()
} else {
onSwipeUp()
}
return true
}
}
return false
}
private fun onSwipeLeft() { Toast.makeText(this, "Left Swipe", Toast.LENGTH_SHORT).show() }
private fun onSwipeRight() { Toast.makeText(this, "Right Swipe", Toast.LENGTH_SHORT).show() }
private fun onSwipeUp() { Toast.makeText(this, "Up Swipe", Toast.LENGTH_SHORT).show() }
private fun onSwipeDown() { Toast.makeText(this, "Down Swipe", Toast.LENGTH_SHORT).show() }
আধুনিক বিকল্প: Jetpack Compose
// Compose-এ
Box(modifier = Modifier
.fillMaxSize()
.pointerInput(Unit) {
detectTapGestures(
onLongPress = { /* ... */ },
onDoubleTap = { /* ... */ }
)
}
.combinedClickable(
onClick = { /* tap */ },
onLongClick = { /* long press */ },
onDoubleClick = { /* double tap */ }
)
)
বা detectDragGestures, detectTransformGestures ব্যবহার করুন।