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 আইকনে ক্লিক করুন। স্ক্রিনে আঙ্গুল দিয়ে বাম, ডান, উপরে, নিচে স্বাইপ করুন - টোস্ট মেসেজে দিক দেখাবে।
