অ্যান্ড্রয়েডে ACTION_DOWN টাচ ইভেন্ট ব্যবহার
এই টিউটোরিয়ালে শিখব কিভাবে `OnTouchListener` এবং `MotionEvent.ACTION_DOWN` ব্যবহার করে টাচ স্ক্রিনে আঙুল স্পর্শের মুহূর্তে (ডাউন ইভেন্ট) অ্যাকশন নেওয়া যায়।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
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 DOWN টেস্ট"
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 DOWN টেস্ট\n(এখানে টাচ করুন)");
actionEvent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// অ্যাকশন টাইপ পাওয়া (মাল্টি-টাচ সাপোর্টের জন্য)
int action = MotionEventCompat.getActionMasked(event);
if (action == MotionEvent.ACTION_DOWN) {
// আঙুল স্পর্শের মুহূর্ত
Toast.makeText(MainActivity.this,
"ACTION_DOWN: আঙুল স্পর্শ হয়েছে!\nX: " + event.getX() + ", Y: " + event.getY(),
Toast.LENGTH_SHORT).show();
// ভিজ্যুয়াল ফিডব্যাক
v.setBackgroundColor(0xFF4CAF50); // সবুজ
return true; // ইভেন্ট কনসাম করা হয়েছে
}
else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
// আঙুল তুলতে হলে 본래 রঙে ফিরে আসা
v.setBackgroundColor(0xFFE0E0E0); // স্লেটি
}
return false; // অন্যান্য ইভেন্ট সিস্টেমে যেতে দিন
}
});
}
}
MotionEvent.ACTION_DOWN ব্যাখ্যা
- ট্রিগার: আঙুল প্রথমবার স্ক্রিন স্পর্শ করলে
- কোঅর্ডিনেট: `event.getX()`, `event.getY()` (ভিউ রিলেটিভ)
- রিটার্ন true: ইভেন্ট হ্যান্ডলড, সিস্টেমে আরও প্রসারিত হবে না
- রিটার্ন false: সিস্টেম ডিফল্ট হ্যান্ডলিং করবে (স্ক্রল, ক্লিক ইত্যাদি)
মূল টাচ ইভেন্ট সমূহ
| কনস্ট্যান্ট | ব্যাখ্যা | সিকোয়েন্স |
|---|---|---|
| ACTION_DOWN | প্রথম স্পর্শ (প্রাইমারি পয়েন্টার) | ১ |
| ACTION_POINTER_DOWN | অতিরিক্ত আঙুল স্পর্শ (মাল্টি-টাচ) | ২, ৩... |
| ACTION_MOVE | আঙুল সরানো (ড্র্যাগ) | রিপিট |
| ACTION_POINTER_UP | অতিরিক্ত আঙুল তুলা | - |
| ACTION_UP | শেষ আঙুল তুলা (প্রাইমারি পয়েন্টার) | শেষ |
| ACTION_CANCEL | ইভেন্ট ক্যান্সেল (সিস্টেম ইন্টারাপ্ট) | - |
OnClickListener vs OnTouchListener
| পদ্ধতি | উপযোগিতা | লিমিটেশন |
|---|---|---|
| OnClickListener | সিম্পল ক্লিক হ্যান্ডলিং | কোঅর্ডিনেট, প্রেসার, মাল্টি-টাচ নেই |
| OnTouchListener | পুরো টাচ কন্ট্রোল | ম্যানুয়ালি ক্লিক লজিক লিখতে হয় |
| GestureDetector | জেসচার (ট্যাপ, ডাবল ট্যাপ, ফ্লিং, লং প্রেস) | কমপ্লেক্স জেসচারের জন্য ভালো |
সেরা অনুশীলন
// ACTION_DOWN-এ true রিটার্ন করলে ACTION_MOVE, ACTION_UP ও এই লিসেনারের কাছে আসবে
// false রিটার্ন করলে শুধু DOWN পাবে, MOVE/UP সিস্টেম হ্যান্ডল করবে (যেমন: স্ক্রোল)
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = MotionEventCompat.getActionMasked(event);
switch (action) {
case MotionEvent.ACTION_DOWN:
// ড্র্যাগ শুরু
return true; // বাকি ইভেন্ট পেতে true দরকার
case MotionEvent.ACTION_MOVE:
// ড্র্যাগ চলছে
return true;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
// ড্র্যাগ শেষ
return true;
}
return false;
}
অ্যাপ্লিকেশন চালানো
রান করলে টেক্সট ভিউতে আঙুল রাখলে সবুজ হবে এবং টোস্টে "ACTION_DOWN" দেখাবে। আঙুল তুললে স্লেটি রঙে ফিরে যাবে।
লক্ষ্য করুন
- MotionEventCompat ব্যবহার করুন মাল্টি-টাচ কমপ্যাটিবিলিটির জন্য
- onTouch-এ true রিটার্ন করলে onClick কল হবে না
- ক্লিক ও টচ দুটোই চাইলে GestureDetector ব্যবহার করুন