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>
ऐप चलाएं
ऐप लॉन्च करें, बाईं इमेज को देर तक दबाकर दाईं ओर ड्रैग करें और ड्रॉप करें। इमेज कंटेनर बदल जाएगी।
