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

অ্যান্ড্রয়েডে ACTION_DOWN ইভেন্ট ব্যবহার

অ্যান্ড্রয়েডে 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 ব্যবহার করুন
  1. অ্যান্ড্রয়েড ফ্র্যাগমেন্টে Context ব্যবহারের পদ্ধতি

  2. অ্যান্ড্রয়েডে Firebase Messaging ব্যবহারের পদ্ধতি

  3. অ্যান্ড্রয়েড টুলবারে SearchView ব্যবহার করার পদ্ধতি

  4. অ্যান্ড্রয়েডে XMLPullParser ব্যবহার করে XML পার্স করার পদ্ধতি