অ্যান্ড্রয়েডে ACTION_UP টাচ ইভেন্ট ব্যবহার
এই টিউটোরিয়ালে শিখব কিভাবে `MotionEvent.ACTION_UP` ব্যবহার করে আঙুল স্ক্রিন থেকে তুলার মুহূর্তে (রিলিজ ইভেন্ট) অ্যাকশন নেওয়া যায়। এটি ক্লিক, ট্যাপ, ড্র্যাগ এন্ড ইত্যাদি ডিটেক্ট করার জন্য ব্যবহৃত হয়।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে File → New Project নির্বাচন করে প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট ফাইল
res/layout/activity_main.xml ফাইলে:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<TextView
android:id="@+id/actionEvent"
android:textSize="40sp"
android:layout_marginTop="30dp"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="ACTION UP টেস্ট\n(এখানে ট্যাপ করুন)"
android:gravity="center"
android:padding="20dp"
android:background="#E0E0E0" />
</LinearLayout>
ধাপ ৩: জাভা কোড
src/MainActivity.java ফাইলে:
package com.example.myapplication;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v4.view.MotionEventCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
TextView actionEvent;
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionEvent = findViewById(R.id.actionEvent);
actionEvent.setText("ACTION UP টেস্ট\n(এখানে ট্যাপ করুন)");
actionEvent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = MotionEventCompat.getActionMasked(event);
if (action == MotionEvent.ACTION_DOWN) {
// স্পর্শ শুরু - ভিজ্যুয়াল ফিডব্যাক
v.setBackgroundColor(0xFF4CAF50); // সবুজ
return true; // মুভ/আপ ইভেন্ট পেতে true
}
else if (action == MotionEvent.ACTION_UP) {
// আঙুল তোলা - ক্লিক কমপ্লিট
Toast.makeText(MainActivity.this,
"ACTION_UP: আঙুল তোলা হয়েছে!\nX: " + event.getX() + ", Y: " + event.getY(),
Toast.LENGTH_SHORT).show();
v.setBackgroundColor(0xFFE0E0E0); // স্লেটি
return true;
}
else if (action == MotionEvent.ACTION_CANCEL) {
// সিস্টেম দ্বারা ক্যান্সেল (যেমন: ফোন কল, নোটিফিকেশন)
v.setBackgroundColor(0xFFE0E0E0);
return true;
}
return false;
}
});
}
}
ACTION_UP বনাম ACTION_DOWN বনাম ACTION_CANCEL
| ইভেন্ট | ট্রিগার | ব্যবহার |
|---|---|---|
| ACTION_DOWN | প্রথম স্পর্শ | ড্র্যাগ শুরু, লং প্রেস টাইমার 스타্ট |
| ACTION_MOVE | আঙুল সরানো | ড্র্যাগ চলছে, স্ক্রোল ডিটেকশন |
| ACTION_UP | সফলভাবে আঙুল তোলা | ক্লিক/ট্যাপ কমপ্লিট, ড্র্যাগ এন্ড |
| ACTION_CANCEL | সিস্টেম ইন্টারাপ্ট | ক্যান্সেলড অপারেশন, ক্লিনআপ |
| বিষয় | OnClickListener | OnTouchListener (ACTION_UP) |
|---|---|---|
| সহজতা | খুব সহজ | ম্যানুয়াল লজিক লাগে |
| কোঅর্ডিনেট | পাওয়া যায় না | পাওয়া যায় (event.getX/Y) |
| লং প্রেস | OnLongClickListener আলাদা | টাইমার দিয়ে কাস্টমাইজযোগ্য |
| ড্র্যাগ ডিটেকশন | না | হ্যাঁ (MOVE ট্র্যাক করে) |
| মাল্টি-টাচ | না | হ্যাঁ (পয়েন্টার আইডি দিয়ে) |
GestureDetector ব্যবহার (সহজ পদ্ধতি)
GestureDetector detector = new GestureDetector(this,
new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// সিঙ্গেল ট্যাপ কনফার্মড (ডাবল ট্যাপ ওয়াট না করে)
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
// ডাবল ট্যাপ
return true;
}
@Override
public void onLongPress(MotionEvent e) {
// লং প্রেস
}
});
view.setOnTouchListener((v, event) -> detector.onTouchEvent(event));
অ্যাপ্লিকেশন চালানো
রান করলে টেক্সট ভিউতে ট্যাপ করলে (ডাউন + আপ) টোস্টে "ACTION_UP" দেখাবে। ড্র্যাগ করলে কিছুই হবে না।
লক্ষ্য করুন
- ACTION_DOWN-এ true রিটার্ন করলে মাত্র ACTION_UP পাবেন
- ACTION_CANCEL হ্যান্ডল করুন (সিস্টেম ইন্টারাপ্টের জন্য)
- ক্লিক ডিটেকশনে দূরত্ব ও সময় দুটোই চেক করুন
- Accessibility: TalkBack ব্যবহারকারীরা ডাবল ট্যাপ করেন - onClick আপনারই কাজ করবে