Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में बाएं/दाएं स्वाइप जेस्चर कैसे हैंडल करें?

परिचय

यह ट्यूटोरियल दिखाता है कि Android में बाएं और दाएं स्वाइप जेस्चर कैसे डिटेक्ट करें। हम एक रीयूजेबल OnSwipeTouchListener क्लास बनाएंगे जो `GestureDetector` का उपयोग करता है।

आवश्यक चरण

चरण 1: नया प्रोजेक्ट बनाएं

Android Studio में File → New Project से नया प्रोजेक्ट बनाएं।

चरण 2: लेआउट फ़ाइल (res/layout/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"
    android:id="@+id/relativeLayout"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="बाएं/दाएं स्वाइप करके जेस्चर डिटेक्ट करें"
        android:textAlignment="center"
        android:textSize="16sp"
        android:textStyle="bold" />

</RelativeLayout>

चरण 3: मुख्य गतिविधि (src/MainActivity.java)

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    RelativeLayout layout;

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

        layout = findViewById(R.id.relativeLayout);

        // कस्टम स्वाइप लिस्टनर अटैच करें
        layout.setOnTouchListener(new OnSwipeTouchListener(MainActivity.this) {
            @Override
            public void onSwipeLeft() {
                super.onSwipeLeft();
                Toast.makeText(MainActivity.this, "बाएं स्वाइप डिटेक्ट हुआ", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onSwipeRight() {
                super.onSwipeRight();
                Toast.makeText(MainActivity.this, "दाएं स्वाइप डिटेक्ट हुआ", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

चरण 4: रीयूजेबल स्वाइप लिस्टनर (OnSwipeTouchListener.java)

import android.content.Context;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;

class OnSwipeTouchListener implements View.OnTouchListener {
    private final GestureDetector gestureDetector;

    OnSwipeTouchListener(Context c) {
        gestureDetector = new GestureDetector(c, new GestureListener());
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        return gestureDetector.onTouchEvent(motionEvent);
    }

    private final class GestureListener extends GestureDetector.SimpleOnGestureListener {
        private static final int SWIPE_THRESHOLD = 100;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;

        @Override
        public boolean onDown(MotionEvent e) {
            return true; // जेस्चर शुरू होने दें
        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            onClick();
            return super.onSingleTapUp(e);
        }

        @Override
        public boolean onDoubleTap(MotionEvent e) {
            onDoubleClick();
            return super.onDoubleTap(e);
        }

        @Override
        public void onLongPress(MotionEvent e) {
            onLongClick();
            super.onLongPress(e);
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try {
                float diffY = e2.getY() - e1.getY();
                float diffX = e2.getX() - e1.getX();

                // क्षैतिज स्वाइप प्रमुख है
                if (Math.abs(diffX) > Math.abs(diffY)) {
                    if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffX > 0) {
                            onSwipeRight(); // दाएं: X बढ़ा
                        } else {
                            onSwipeLeft();  // बाएं: X घटा
                        }
                        return true;
                    }
                }
                // लंबवत स्वाइप (वैकल्पिक)
                else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                    if (diffY > 0) {
                        onSwipeDown();
                    } else {
                        onSwipeUp();
                    }
                    return true;
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            return false;
        }
    }

    // ओवरराइड करने योग्य कॉलबैक मेथड्स
    public void onSwipeRight() {}
    public void onSwipeLeft() {}
    public void onSwipeUp() {}
    public void onSwipeDown() {}
    public void onClick() {}
    public void onDoubleClick() {}
    public void onLongClick() {}
}

चरण 5: मैनिफेस्ट फ़ाइल (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>

ऐप चलाएं

डिवाइस कनेक्ट करें, Run क्लिक करें। स्क्रीन पर बाएं/दाएं स्वाइप करें - संबंधित टोस्ट मैसेज दिखेगा।

Android में बाएं/दाएं स्वाइप जेस्चर कैसे हैंडल करें?

महत्वपूर्ण बिंदु

  • SWIPE_THRESHOLD - न्यूनतम स्वाइप दूरी (पिक्सेल)। डिफ़ॉल्ट 100।
  • SWIPE_VELOCITY_THRESHOLD - न्यूनतम स्वाइप गति (पिक्सेल/सेकंड)। धीमे ड्रैग को अनदेखा करता है।
  • onDown() में `true` रिटर्न करना अनिवार्य है ताकि `onFling` कॉल हो।
  • क्लास रीयूजेबल है - किसी भी `View` पर `setOnTouchListener(new OnSwipeTouchListener(context) { ... })` लगाएं।
  • यह लिस्टनर सिंगल टैप, डबल टैप, लॉन्ग प्रेस भी सपोर्ट करता है।

उपयोग के उदाहरण

  • ViewPager/TabLayout - स्वाइप से टैब बदलें।
  • कार्ड स्टैक - टिंडर-स्टाइल स्वाइप लेफ्ट/राइट (लाइक/डिसलाइक)।
  • इमेज गैलरी - स्वाइप से अगला/पिछला इमेज।
  • डिसमिसेबल आइटम्स - RecyclerView आइटम स्वाइप करके डिलीट/आर्काइव।

आधुनिक विकल्प

  • ItemTouchHelper - RecyclerView स्वाइप-टू-डिसमिस/ड्रैग-एंड-ड्रॉप के लिए बिल्ट-इन।
  • Jetpack Compose - `detectDragGestures`, `detectHorizontalDragGestures`, `swipeable` स्टेट।
  • ViewPager2 - फ्रैगमेंट/व्यू स्वाइप नेविगेशन के लिए मानक।
  1. एंड्रॉयड पर बैक टैप जेस्चर कैसे इनेबल और उपयोग करें एंड्रॉयड पर बैक टैप जेस्चर कैसे इनेबल और उपयोग करें

    iOS 14 ने बैक टैप नामक एक साफ कंट्रोल जेस्चर पेश किया। यह आपको अपने iPhone के पीछे टैप करके कुछ फ़ंक्शन सक्रिय करने देता है। अब आप एक थर्ड-पार्टी ऐप की बदौलत इस कार्यक्षमता को अपने एंड्रॉयड फ़ोन पर ला सकते हैं। यह गाइड दिखाता है कि आप अपने एंड्रॉयड डिवाइस पर बैक टैप जेस्चर सेट अप और उपयोग करने के ब

  1. एंड्रॉइड पर Gmail स्वाइप जेस्चर को कस्टमाइज़ या डिसेबल कैसे करें एंड्रॉइड पर Gmail स्वाइप जेस्चर को कस्टमाइज़ या डिसेबल कैसे करें

    हाल तक, एंड्रॉइड Gmail ऐप में किसी ईमेल को स्वाइप करने का मतलब दो चीजों में से एक होता था: या तो आप ईमेल को डिलीट कर देते थे या उसे आर्काइव कर देते थे। एक नए अपडेट ने उपयोगकर्ताओं को कई और विकल्प दिए हैं, जिनमें से एक उन लोगों के लिए बहुत उपयोगी है जो गलती से स्वाइप कर देते हैं। नए Gmail अपडेट के सा

  1. एंड्रॉयड पर कस्टम जेस्चर कैसे जोड़ें एंड्रॉयड पर कस्टम जेस्चर कैसे जोड़ें

    अपने एंड्रॉयड डिवाइस पर कस्टम जेस्चर बनाना आपके लिए समय बचाने का एक शानदार तरीका है। इन कस्टम जेस्चर को बनाकर, आप अपने डिवाइस को उन मूवमेंट का उपयोग करने के लिए कस्टमाइज़ कर सकते हैं जिनके साथ आप सबसे अधिक सहज हैं, किसी विशेष कार्य को निष्पादित करने के लिए जैसे नया टैब खोलना। क्या यह बहुत अच्छा नही