एंड्रॉइड में ACTION_UP टच इवेंट हैंडल करें
यह ट्यूटोरियल दिखाता है कि MotionEvent.ACTION_UP का उपयोग करके टच रिलीज (उंगली उठाने पर) कैसे डिटेक्ट करें। यह क्लिक/टैप पहचानने के लिए उपयोगी है।
चरण 1: प्रोजेक्ट बनाएं
एंड्रॉइड स्टूडियो में नया प्रोजेक्ट बनाएं।
चरण 2: लेआउट (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:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="24dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/touchView"
android:layout_width="200dp"
android:layout_height="200dp"
android:textSize="24sp"
android:textStyle="bold"
android:gravity="center"
android:background="#FF9800"
android:textColor="#FFFFFF"
android:text="यहां टच करें और छोड़ें\n(ACTION_UP)"
android:layout_marginTop="30dp"/>
</LinearLayout>
चरण 3: एक्टिविटी कोड (src/MainActivity.java)
package com.example.actionupdemo;
import android.os.Build;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.MotionEventCompat;
public class MainActivity extends AppCompatActivity {
private TextView touchView;
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
touchView = findViewById(R.id.touchView);
touchView.setText("ACTION UP टेस्ट\nटच करें और छोड़ें");
touchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = MotionEventCompat.getActionMasked(event);
if (action == MotionEvent.ACTION_UP) {
// उंगली उठी - टैप/क्लिक पूरा हुआ
Toast.makeText(MainActivity.this,
"ACTION_UP: टच रिलीज हुआ", Toast.LENGTH_SHORT).show();
// विजुअल फीडबैक
v.setBackgroundColor(0xFF2196F3); // नीला
((TextView) v).setText("छोड़ा गया!\nACTION_UP");
return true;
}
// ACTION_DOWN के लिए true लौटाएं ताकि UP मिले
if (action == MotionEvent.ACTION_DOWN) {
v.setBackgroundColor(0xFF4CAF50); // हरा
return true;
}
return false;
}
});
}
}
टच इवेंट सीक्वेंस
// सामान्य टैप: ACTION_DOWN → (ACTION_MOVE x N) → ACTION_UP // लॉन्ग प्रेस: ACTION_DOWN → (ACTION_MOVE x N) → ACTION_UP (लंबे समय बाद) // कैंसल (स्क्रॉल इंटरसेप्ट, आदि): ACTION_DOWN → (ACTION_MOVE x N) → ACTION_CANCEL // मल्टी-टच: ACTION_DOWN (पहली उंगली) ACTION_POINTER_DOWN (दूसरी उंगली) ACTION_MOVE (दोनों) ACTION_POINTER_UP (दूसरी उंगली उठी) ACTION_MOVE (पहली उंगली) ACTION_UP (पहली उंगली उठी)
ACTION_UP vs ACTION_CANCEL
| इवेंट | कब होता है | हैंडलिंग |
|---|---|---|
ACTION_UP | सामान्य टच समाप्ति | क्लिक/एक्शन पूरा करें |
ACTION_CANCEL | सिस्टम द्वारा इंटरसेप्ट (स्क्रॉल, पैरेंट व्यू) | क्लीनअप करें, एक्शन निष्पादित न करें |
| विशेषता | OnClickListener | OnTouchListener |
|---|---|---|
| सरलता | बहुत सरल | जटिल |
| क्लिक हैंडलिंग | स्वचालित (डाउन+अप) | मैन्युअल |
| लॉन्ग क्लिक | OnLongClickListener | मैन्युअल टाइमर |
| ड्रैग/स्वाइप | नहीं | हां |
| मल्टी-टच | नहीं | हां |
| कस्टम विजुअल फीडबैक | सीमित | पूर्ण नियंत्रण |
