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

Android में ड्रैग एंड ड्रॉप कैसे उपयोग करें?

Android Drag and Drop API से व्यू मूव करना

यह उदाहरण दर्शाता है कि View.OnDragListener और View.OnTouchListener का उपयोग करके दो कंटेनर्स के बीच एक इमेज को ड्रैग-एंड-ड्रॉप कैसे किया जाए।

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

Android Studio में File → New Project चुनें।

चरण 2: लेआउट फ़ाइल (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="horizontal"
    android:padding="16dp"
    tools:context="MainActivity">

    <!-- बायां कंटेनर (स्रोत) -->
    <LinearLayout
        android:id="@+id/leftContainer"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:layout_margin="8dp"
        android:background="@android:color/darker_gray"
        android:gravity="center"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/draggableImage"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_margin="16dp"
            android:background="@drawable/your_image"
            android:contentDescription="ड्रैग करने योग्य इमेज" />

    </LinearLayout>

    <!-- दायां कंटेनर (लक्ष्य) -->
    <LinearLayout
        android:id="@+id/rightContainer"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:layout_margin="8dp"
        android:background="@android:color/darker_gray"
        android:gravity="center"
        android:orientation="vertical">

    </LinearLayout>

</LinearLayout>

चरण 3: MainActivity (src/MainActivity.java)

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity 
        implements View.OnTouchListener, View.OnDragListener {

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

        // ड्रैग करने योग्य व्यू पर टच लिसनर
        findViewById(R.id.draggableImage).setOnTouchListener(this);
        
        // दोनों कंटेनर्स पर ड्रैग लिसनर
        findViewById(R.id.leftContainer).setOnDragListener(this);
        findViewById(R.id.rightContainer).setOnDragListener(this);
    }

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            // ड्रैग शुरू करें
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
            // null डेटा = कोई डेटा ट्रांसफर नहीं, सिर्फ मूव
            view.startDragAndDrop(null, shadowBuilder, view, 0);
            
            // ड्रैग के दौरान व्यू छुपाएं
            view.setVisibility(View.INVISIBLE);
            return true;
        }
        return false;
    }

    @Override
    public boolean onDrag(View view, DragEvent event) {
        int action = event.getAction();
        
        switch (action) {
            case DragEvent.ACTION_DRAG_STARTED:
                // ड्रैग शुरू हुआ - ड्रॉप स्वीकार करने के लिए true लौटाएं
                return true;

            case DragEvent.ACTION_DRAG_ENTERED:
                // ड्रैग इस व्यू में आया - विजुअल फीडबैक दें
                view.setBackgroundColor(0xFFE0E0E0); // हल्का ग्रे
                return true;

            case DragEvent.ACTION_DRAG_EXITED:
                // ड्रैग इस व्यू से बाहर गया
                view.setBackgroundColor(0xFFCCCCCC); // मूल रंग
                return true;

            case DragEvent.ACTION_DROP:
                // ड्रॉप हुआ - व्यू मूव करें
                View draggedView = (View) event.getLocalState();
                ViewGroup sourceParent = (ViewGroup) draggedView.getParent();
                ViewGroup targetContainer = (ViewGroup) view;
                
                // स्रोत से हटाएं
                sourceParent.removeView(draggedView);
                // लक्ष्य में जोड़ें
                targetContainer.addView(draggedView);
                // दृश्यमान करें
                draggedView.setVisibility(View.VISIBLE);
                
                // कंटेनर रंग रीसेट
                view.setBackgroundColor(0xFFCCCCCC);
                return true;

            case DragEvent.ACTION_DRAG_ENDED:
                // ड्रैग समाप्त (चाहे ड्रॉप हुआ हो या नहीं)
                view.setBackgroundColor(0xFFCCCCCC);
                // अगर ड्रॉप नहीं हुआ तो व्यू फिर से दिखाएं
                View dragged = (View) event.getLocalState();
                if (!event.getResult()) {
                    dragged.setVisibility(View.VISIBLE);
                }
                return true;
        }
        return false;
    }
}

DragEvent एक्शन प्रकार

एक्शन विवरण
ACTION_DRAG_STARTED ड्रैग ऑपरेशन शुरू हुआ
ACTION_DRAG_ENTERED ड्रैग शैडो व्यू बाउंड्स में आया
ACTION_DRAG_LOCATION ड्रैग मूवमेंट (निर्देशांक के साथ)
ACTION_DRAG_EXITED ड्रैग शैडो व्यू बाउंड्स से बाहर गया
ACTION_DROP उपयोगकर्ता ने ड्रॉप किया
ACTION_DRAG_ENDED ड्रैग ऑपरेशन समाप्त

डेटा ट्रांसफर के साथ ड्रैग (ClipData)

// ड्रैग शुरू करते समय डेटा पास करें
ClipData data = ClipData.newPlainText("item_id", "image_1");
view.startDragAndDrop(data, shadowBuilder, view, 0);

// ड्रॉप पर डेटा पढ़ें
case DragEvent.ACTION_DROP:
    ClipData.Item item = event.getClipData().getItemAt(0);
    String itemId = item.getText().toString();
    // itemId के आधार पर लॉजिक
    break;

चरण 4: 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>
                
                
            </intent-filter>
        </activity>

    </application>
</manifest>
💡 सुधार: मूल कोड में `ACTION_DROP` में `view.getId() == R.id.leftView` चेक गलत था - `view` ड्रैग टारगेट है, ड्रैग्ड व्यू नहीं। सही तरीका `event.getLocalState()` से ड्रैग्ड व्यू प्राप्त करना है। साथ ही `startDragAndDrop()` (API 24+) उपयोग करें, `startDrag()` डिप्रिकेटेड है।

ऐप चलाएं

ऐप लॉन्च करें, बाईं इमेज को देर तक दबाकर दाईं ओर ड्रैग करें और ड्रॉप करें। इमेज कंटेनर बदल जाएगी।

Android में ड्रैग एंड ड्रॉप कैसे उपयोग करें?

  1. एंड्रॉइड टीवी पर ADB सेट अप और उपयोग कैसे करें एंड्रॉइड टीवी पर ADB सेट अप और उपयोग कैसे करें

    चाहे आपके पास एंड्रॉइड स्मार्टफोन हो या एंड्रॉइड टीवी, ऑपरेटिंग सिस्टम की प्रकृति समान रहती है। दूसरे शब्दों में, एक एंड्रॉइड टीवी किसी भी अन्य एंड्रॉइड डिवाइस की तरह ही ट्वीक करने योग्य है। यदि आप कुछ गंभीर ट्वीक करने की योजना बना रहे हैं जैसे एंड्रॉइड ऐप साइडलोड करना, तो आपको एंड्रॉइड डिबग ब्रिज,

  1. iOS 11 में ड्रैग एंड ड्रॉप का उपयोग कैसे करें iOS 11 में ड्रैग एंड ड्रॉप का उपयोग कैसे करें

    ड्रैग एंड ड्रॉप iOS 11 में iPhone और iPad पर आने वाली एक नई सुविधा है, और यह दशकों से PC और Mac पर उपलब्ध चीजों में सुधार करती दिखती है। यह करना अविश्वसनीय रूप से आसान भी है; आप बस उस आइटम पर दबाकर रखें जिसे आप खींचना चाहते हैं, और यह आपकी उंगली पर पिन हो जाता है। वहां से, बस अपने दूसरे हाथ से डिस्प

  1. Android विजिबिलिटी लिसनर्स में मास्टरी: व्यू विजिबिलिटी ट्रैक करने का तरीका और कारण Android विजिबिलिटी लिसनर्स में मास्टरी: व्यू विजिबिलिटी ट्रैक करने का तरीका और कारण

    Android UI व्यूज़ से बना होता है, और एक सामान्य ऐप्लिकेशन में आमतौर पर कई व्यूज़ होते हैं। यह जानने के लिए कि यूज़र वर्तमान में किस व्यू को देख रहा है, आपको विजिबिलिटी लिसनर्स इंस्टॉल करने होंगे।व्यू के विजिबिलिटी स्टेटस की पहचान करने के लिए आपके पास मौजूद विभिन्न विकल्पों के बारे में जानने के लिए आ