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

Android-এ স্বাইপ দিক (বাম/ডান, উপরে/নিচে) সনাক্ত করার পদ্ধতি

Android-এ স্বাইপ দিক (বাম/ডান, উপরে/নিচে) সনাক্ত করার পদ্ধতি

এই উদাহরণটি দেখায় কিভাবে GestureDetector এবং SimpleOnGestureListener ব্যবহার করে টাচ স্ক্রিনে স্বাইপ জেসচার (বাম, ডান, উপরে, নিচে) সনাক্ত করা যায়।

প্রয়োজনীয় ধাপসমূহ

ধাপ ১: নতুন প্রজেক্ট তৈরি করুন

Android Studio-তে File → New Project এ যান এবং প্রজেক্ট তৈরি করুন।

ধাপ ২: লেআউট ফাইল (res/layout/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:id="@+id/relativeLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="স্বাইপ করুন: বাম, ডান, উপরে, নিচে"
        android:textSize="24sp"
        android:textStyle="bold" />

</RelativeLayout>

ধাপ ৩: MainActivity.java-এ স্বাইপ লিসেনার বাস্তবায়ন করুন

import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private OnSwipeTouchListener onSwipeTouchListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // রুট ভিউতে স্বাইপ লিসেনার যোগ করুন
        View rootView = findViewById(R.id.relativeLayout);
        onSwipeTouchListener = new OnSwipeTouchListener(this, rootView) {
            @Override
            public void onSwipeRight() {
                Toast.makeText(MainActivity.this, "ডানে স্বাইপ করা হয়েছে", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onSwipeLeft() {
                Toast.makeText(MainActivity.this, "বামে স্বাইপ করা হয়েছে", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onSwipeTop() {
                Toast.makeText(MainActivity.this, "উপরে স্বাইপ করা হয়েছে", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onSwipeBottom() {
                Toast.makeText(MainActivity.this, "নিচে স্বাইপ করা হয়েছে", Toast.LENGTH_SHORT).show();
            }
        };
    }

    // স্বাইপ টাচ লিসেনার ক্লাস
    public static abstract class OnSwipeTouchListener implements View.OnTouchListener {

        private final GestureDetector gestureDetector;
        private final Context context;

        public OnSwipeTouchListener(Context ctx, View mainView) {
            this.context = ctx;
            gestureDetector = new GestureDetector(ctx, new GestureListener());
            mainView.setOnTouchListener(this);
        }

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return gestureDetector.onTouchEvent(event);
        }

        private final class GestureListener extends GestureDetector.SimpleOnGestureListener {

            private static final int SWIPE_THRESHOLD = 100; // ন্যূনতম স্বাইপ দূরতা (পিক্সেল)
            private static final int SWIPE_VELOCITY_THRESHOLD = 100; // ন্যূনতম বেগ (পিক্সেল/সেকেন্ড)

            @Override
            public boolean onDown(MotionEvent e) {
                return true; // জেসচার শুরু হলে true রিটার্ন করুন
            }

            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                boolean result = false;
                try {
                    float diffY = e2.getY() - e1.getY();
                    float diffX = e2.getX() - e1.getX();

                    // অনুভূমিক স্বাইপ (বাম/ডান)
                    if (Math.abs(diffX) > Math.abs(diffY)) {
                        if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                            if (diffX > 0) {
                                onSwipeRight();
                            } else {
                                onSwipeLeft();
                            }
                            result = true;
                        }
                    }
                    // লম্ব স্বাইপ (উপরে/নিচে)
                    else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffY > 0) {
                            onSwipeBottom();
                        } else {
                            onSwipeTop();
                        }
                        result = true;
                    }
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
                return result;
            }
        }

        // ওভাররাইড করার জন্য অ্যাবস্ট্রাক্ট মেথড
        public abstract void onSwipeRight();
        public abstract void onSwipeLeft();
        public abstract void onSwipeTop();
        public abstract void onSwipeBottom();
    }
}

ধাপ ৪: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

কোড ব্যাখ্যা

  • GestureDetector: টাচ ইভেন্ট থেকে জেসচার (ট্যাপ, ডাবল ট্যাপ, লং প্রেস, ফ্লিং/স্বাইপ) সনাক্ত করে।
  • SimpleOnGestureListener: শুধু প্রয়োজনীয় জেসচার হ্যান্ডেল করার জন্য বেস ক্লাস।
  • onFling(): দ্রুত স্বাইপ মোশন (ফ্লিং) সনাক্ত করলে কল হয়। প্যারামিটার:
    • e1: প্রথম ডাউন ইভেন্ট
    • e2: মুভ/আপ ইভেন্ট
    • velocityX, velocityY: X এবং Y অক্ষের বেগ (পিক্সেল/সেকেন্ড)
  • SWIPE_THRESHOLD: ন্যূনতম দূরতা যা স্বাইপ হিসেবে গণ্য হবে (ডিফল্ট 100px)।
  • SWIPE_VELOCITY_THRESHOLD: ন্যূনতম বেগ যা দ্রুত স্বাইপ হিসেবে গণ্য হবে।

সensitivity সমায়োজন

আপনার অ্যাপের প্রয়োজন অনুযায়ী থ্রেশহোল্ড মান সমায়োজন করুন:

  • আরো সংবেদনশীল: SWIPE_THRESHOLD = 50, SWIPE_VELOCITY_THRESHOLD = 50
  • কম সংবেদনশীল (অনিচ্ছাকৃত স্বাইপ এড়াতে): SWIPE_THRESHOLD = 150, SWIPE_VELOCITY_THRESHOLD = 200

আধুনিক বিকল্প: ViewBinding + Kotlin Extension

Kotlin-এ এক্সটেনশন ফাংশন ব্যবহার করে আরও ক্লিন কোড লিখা যায়:

// Extension function
fun View.setOnSwipeListener(
    onLeft: () -> Unit = {},
    onRight: () -> Unit = {},
    onUp: () -> Unit = {},
    onDown: () -> Unit = {}
) {
    val detector = GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
        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) > 100 && abs(velocityX) > 100) {
                    if (diffX > 0) onRight() else onLeft()
                    return true
                }
            } else if (abs(diffY) > 100 && abs(velocityY) > 100) {
                if (diffY > 0) onDown() else onUp()
                return true
            }
            return false
        }
    })
    setOnTouchListener { _, event -> detector.onTouchEvent(event) }
}

// ব্যবহার
binding.root.setOnSwipeListener(
    onLeft = { toast("বামে স্বাইপ") },
    onRight = { toast("ডানে স্বাইপ") }
)

অ্যাপ্লিকেশন চালানোর পদ্ধতি

আপনার Android ডিভাইস কম্পিউটারের সাথে সংযুক্ত করুন। Android Studio-তে Run আইকনে ক্লিক করুন। স্ক্রিনে আঙ্গুল দিয়ে বাম, ডান, উপরে, নিচে স্বাইপ করুন - টোস্ট মেসেজে দিক দেখাবে।

Android-এ স্বাইপ দিক (বাম/ডান, উপরে/নিচে) সনাক্ত করার পদ্ধতি

  1. অ্যান্ড্রয়েডে Google Maps-এ টাচ ও অবস্থান ডিটেক্ট করা

  2. অ্যান্ড্রয়েডে স্বাইপ জেসচার (বাম-ডান) হ্যান্ডেল করার পদ্ধতি

  3. আইফোন ও অ্যান্ড্রয়েডের মধ্যে সিমলেস ফাইল শেয়ারিং: দ্রুত, সুরক্ষিত পদ্ধতি

  4. PC এবং অ্যান্ড্রয়েড ফোনের মধ্যে সহজে ফাইল ট্রান্সফার: ধাপে ধাপে গাইড