কম্পিউটার টিউটোরিয়াল

Kotlin ব্যবহার করে Android-এ ফ্লিং জেসচার ডিটেকশন বাস্তবায়ন

ওভারভিউ

এই টিউটোরিয়ালে 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 ব্যবহার করুন।

  1. অ্যান্ড্রয়েডে ভার্টিক্যাল SeekBar তৈরি করার পদ্ধতি

  2. অ্যান্ড্রয়েডে ফ্লিং জেসচার ডিটেকশন ইমপ্লিমেন্ট করার পদ্ধতি

  3. Kotlin-এ Android অ্যাপ থেকে HTML ইমেইল পাঠানোর পদ্ধতি

  4. অ্যান্ড্রয়েড এমুলেটরের IP ঠিকানা কোটলিন ব্যবহার করে পাওয়ার উপায়