एंड्रॉइड में ACTION_DOWN टच इवेंट हैंडल करें
यह ट्यूटोरियल दिखाता है कि OnTouchListener और MotionEvent.ACTION_DOWN का उपयोग करके टच डाउन इवेंट (उंगली स्क्रीन छूने पर) कैसे संभालें।
चरण 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="#2196F3"
android:textColor="#FFFFFF"
android:text="यहां टच करें\n(ACTION_DOWN)"
android:layout_marginTop="30dp"/>
</LinearLayout>
चरण 3: एक्टिविटी कोड (src/MainActivity.java)
package com.example.actiondowndemo;
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 DOWN टेस्ट\nयहां टच करें");
touchView.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: टच शुरू हुआ", Toast.LENGTH_SHORT).show();
// विजुअल फीडबैक
v.setBackgroundColor(0xFF4CAF50); // हरा
((TextView) v).setText("दबाया गया!\nACTION_DOWN");
return true; // इवेंट खपत हुआ
}
return false; // अन्य इवेंट्स सिस्टम को पास करें
}
});
}
}
टच इवेंट प्रकार
| कॉन्स्टेंट | विवरण | कब फायर होता है |
|---|---|---|
ACTION_DOWN | प्राथमिक पॉइंटर डाउन | पहली उंगली छूती है |
ACTION_POINTER_DOWN | अतिरिक्त पॉइंटर डाउन | दूसरी/तीसरी उंगली छूती है |
ACTION_MOVE | पॉइंटर मूव | उंगली घूमती है |
ACTION_UP | प्राथमिक पॉइंटर अप | अंतिम उंगली उठती है |
ACTION_POINTER_UP | अतिरिक्त पॉइंटर अप | गैर-अंतिम उंगली उठती है |
ACTION_CANCEL | जेस्चर कैंसल | सिस्टम द्वारा इंटरसेप्ट |
मल्टी-टच के लिए एक्शन इंडेक्स प्राप्त करना
int action = MotionEventCompat.getActionMasked(event);
int pointerIndex = MotionEventCompat.getActionIndex(event);
int pointerId = event.getPointerId(pointerIndex);
// ACTION_POINTER_DOWN/UP के लिए pointerIndex उपयोग करें
if (action == MotionEvent.ACTION_POINTER_DOWN) {
float x = event.getX(pointerIndex);
float y = event.getY(pointerIndex);
}
रिटर्न मान का महत्व
true: इवेंट खपत हुआ, पैरेंट को पास नहीं होगा, बाद के इवेंट्स (MOVE, UP) इसी व्यू को मिलेंगेfalse: इवेंट खपत नहीं हुआ, पैरेंट को पास होगा, बाद के इवेंट्स नहीं मिलेंगे- ACTION_DOWN के लिए true लौटाना आवश्यक है यदि आप MOVE/UP प्राप्त करना चाहते हैं
कस्टम व्यू में onTouchEvent ओवरराइड करना
public class CustomView extends View {
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = MotionEventCompat.getActionMasked(event);
switch (action) {
case MotionEvent.ACTION_DOWN:
// हैंडल डाउन
return true;
case MotionEvent.ACTION_MOVE:
// हैंडल मूव
return true;
case MotionEvent.ACTION_UP:
// हैंडल अप
return true;
case MotionEvent.ACTION_CANCEL:
// क्लीनअप
return true;
}
return super.onTouchEvent(event);
}
}
GestureDetector उपयोग करना (उच्च-स्तरीय)
GestureDetector gestureDetector = new GestureDetector(this,
new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
return true; // आवश्यक: अन्य जेस्चर्स के लिए true लौटाएं
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// सिंगल टैप
return true;
}
@Override
public void onLongPress(MotionEvent e) {
// लॉन्ग प्रेस
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float vX, float vY) {
// स्वाइप/फ्लिंग
return true;
}
});
// OnTouchListener में delegate करें
view.setOnTouchListener((v, event) -> gestureDetector.onTouchEvent(event));
चरण 4: टेस्ट करें
- ऐप चलाएं
- नीले बॉक्स पर टच करें और दबाए रखें
- टोस्ट "ACTION_DOWN: टच शुरू हुआ" दिखेगा
- बॉक्स हरा हो जाएगा
- उंगली उठाने पर कोई टोस्ट नहीं (क्योंकि हमने false लौटाया)
