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

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

ওভারভিউ

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

পূর্বশর্ত

  • অ্যান্ড্রয়েড স্টুডিও
  • Java ও টাচ ইভেন্ট বেসিক জ্ঞান

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

File → New Project → Empty Activity (Java) নির্বাচন করুন।

ধাপ ২: লেআউট (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="4dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textAlignment="center"
        android:textSize="16sp"
        android:textStyle="bold"
        android:text="Swipe Left to Right and Right to Left to detect Swipe Gesture" />

</RelativeLayout>

ধাপ ৩: MainActivity.java

package com.example.swipegesture;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    RelativeLayout layout;

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

        layout = findViewById(R.id.relativeLayout);
        
        // কাস্টম টাচ লিসেনার সেট করুন
        layout.setOnTouchListener(new OnSwipeTouchListener(MainActivity.this) {
            @Override
            public void onSwipeLeft() {
                super.onSwipeLeft();
                Toast.makeText(MainActivity.this, "Swipe Left gesture detected", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onSwipeRight() {
                super.onSwipeRight();
                Toast.makeText(MainActivity.this, "Swipe Right gesture detected", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

ধাপ ৪: কাস্টম ক্লাস তৈরি করুন (OnSwipeTouchListener.java)

Right-click package → New → Java Class নাম দিন OnSwipeTouchListener।

package com.example.swipegesture;

import android.content.Context;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;

public class OnSwipeTouchListener implements View.OnTouchListener {

    private final GestureDetector gestureDetector;

    public OnSwipeTouchListener(Context context) {
        gestureDetector = new GestureDetector(context, new GestureListener());
    }

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

    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; // জেসচার শুরু করার অনুমতি
        }

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

                // আড়াঘরে (horizontal) স্বাইপ চেক
                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();  // বামে স্বাইপ
                        }
                        return true;
                    }
                } 
                // খাড়া (vertical) স্বাইপ চেক (ঐচ্ছিক)
                else {
                    if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffY > 0) {
                            onSwipeDown();
                        } else {
                            onSwipeUp();
                        }
                        return true;
                    }
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            return false;
        }
    }

    // ওভাররাইড করার জন্য খালি মেথডগুলো
    public void onSwipeRight() {}
    public void onSwipeLeft() {}
    public void onSwipeUp() {}
    public void onSwipeDown() {}
}

ধাপ ৫: AndroidManifest.xml

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

    <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>

চলান ও পরীক্ষা

অ্যাপ চালানোর পর স্ক্রিনে বামে বা ডানে স্বাইপ করলে সংশ্লিষ্ট টোস্ট মেসেজ দেখাবে।

উন্নত টিপস

  • RecyclerView/ListView-এ: আইটেম-এ স্বাইপ একশনের জন্য ItemTouchHelper ব্যবহার করুন।
  • ViewPager2: পেজ নেভিগেশনের জন্য বিল্ট-ইন স্বাইপ সাপোর্ট আছে।
  • Threshold টিউনিং: ডিভাইস স্ক্রিন ডেনসিটি অনুযায়ী SWIPE_THRESHOLD সমন্বয় করুন।
  • Edge-to-Edge: সিস্টেম জেসচার (ব্যাক, হোম) সাথে সংঘর্ষ এড়াতে WindowInsets ব্যবহার করুন।
  1. Android-এ স্বাইপ দিক (বাম/ডান, উপরে/নিচে) সনাক্ত করার পদ্ধতি

  2. Android-এ ব্যাক ট্যাপ জেসচার সক্ষম এবং ব্যবহার করার পদ্ধতি

  3. অ্যান্ড্রয়েডে জিমেল সোয়াইপ জেসচার কাস্টমাইজ বা ডিজেবল করার পদ্ধতি

  4. অ্যান্ড্রয়েডে কাস্টম জেসচার যোগ করার পদ্ধতি