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

অ্যান্ড্রয়েডে নির্দিষ্ট পজিশনে টাচ ইভেন্ট সিমুলেট করার পদ্ধতি

onTouchEvent ব্যবহার করে টাচ ইভেন্ট হ্যান্ডলিং

এই উদাহরণটি দেখায় কীভাবে Activity-এ `onTouchEvent()` ওভাররাইড করে স্ক্রিনে টাচ ইভেন্ট ডিটেক্ট করা এবং কোঅর্ডিনেট পাওয়া যায়।

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

Android Studio-তে File → New Project থেকে প্রজেক্ট তৈরি করুন।

ধাপ ২: লেআউট XML (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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="4dp"
    tools:context=".MainActivity">
</RelativeLayout>

ধাপ ৩: MainActivity.java বাস্তবায়ন

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private boolean isTouch = false;

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

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int x = (int) event.getX();
        int y = (int) event.getY();
        int action = event.getAction();
        
        String actionName = "";
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                actionName = "ACTION_DOWN";
                isTouch = true;
                break;
            case MotionEvent.ACTION_MOVE:
                actionName = "ACTION_MOVE";
                break;
            case MotionEvent.ACTION_UP:
                actionName = "ACTION_UP";
                break;
            case MotionEvent.ACTION_CANCEL:
                actionName = "ACTION_CANCEL";
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                actionName = "POINTER_DOWN (Multi-touch)";
                break;
            case MotionEvent.ACTION_POINTER_UP:
                actionName = "POINTER_UP (Multi-touch)";
                break;
        }
        
        // টোস্ট দেখান (বहুত ফ্রিকোয়েন্ট হলে লগ ব্যবহার করুন)
        Toast.makeText(this, actionName + " X: " + x + " Y: " + y, Toast.LENGTH_SHORT).show();
        
        return true; // true রিটার্ন করলে ইভেন্ট কনসুমড মনে হবে
    }
}

MotionEvent এর মূল অ্যাকশন টাইপ

অ্যাকশনব্যাখ্যা
ACTION_DOWNপ্রথম আঙুল স্ক্রিন স্পর্শ করল
ACTION_MOVEআঙুল স্ক্রিনে সরানো হচ্ছে
ACTION_UPআঙুল স্ক্রিন থেকে উঠল
ACTION_CANCELজেসচার ক্যান্সেল হয়েছে
ACTION_POINTER_DOWN/UPমাল্টি-টাচ: অতিরিক্ত আঙুল স্পর্শ/উঠল

প্রোগ্রাম্যাটিক্যালি টাচ ইভেন্ট সিমুলেট করা (Instrumentation)

টেস্টিং বা অটোমেশনের জন্য টাচ ইভেন্ট ইঞ্জেক্ট করা যায় (সিস্টেম পারমিশন দরকার):

import android.app.Instrumentation;
import android.os.SystemClock;

Instrumentation instrumentation = new Instrumentation();

// টাচ ডাউন
long downTime = SystemClock.uptimeMillis();
MotionEvent downEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0);
instrumentation.sendPointerSync(downEvent);

// টাচ আপ
long upTime = SystemClock.uptimeMillis();
MotionEvent upEvent = MotionEvent.obtain(downTime, upTime, MotionEvent.ACTION_UP, x, y, 0);
instrumentation.sendPointerSync(upEvent);

// মেমরি রিলিজ
downEvent.recycle();
upEvent.recycle();

দ্রষ্টব্য: সিকিউরিটি সীমাবদ্ধতা

  • সাধারণ অ্যাপ অন্য অ্যাপের ওপর টাচ ইভেন্ট ইঞ্জেক্ট করতে পারে না
  • `INJECT_EVENTS` পারমিশন শুধু সিস্টেম অ্যাপে দেয়া হয়
  • UI টেস্টের জন্য **Espresso** বা **UIAutomator** ব্যবহার করুন

ধাপ ৪: 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>

অ্যাপ্লিকেশন টেস্ট করুন

অ্যাপ রান করুন এবং স্ক্রিনের যেকোনো জায়গায় টাচ করুন। টোস্ট মেসেজে টাচের ধরন (DOWN, MOVE, UP) এবং X, Y কোঅর্ডিনেট দেখাবে।

  1. অ্যান্ড্রয়েডে Toast মেসেজ দেখানোর পদ্ধতি

  2. অ্যান্ড্রয়েড অ্যাপে শেক ইভেন্ট কীভাবে সনাক্ত করবেন?

  3. অ্যান্ড্রয়েডে SearchView দিয়ে RecyclerView ফিল্টার করবেন কীভাবে?

  4. অ্যান্ড্রয়েডে Google Maps-এ টাচ ও অবস্থান ডিটেক্ট করা