मैंने Service
कॉल का उपयोग फ़्लोटिंग विंडो बनाने के लिए किया जो सभी अन्य विचारों/गतिविधियों पर तैरता है। इस विंडो में अपना Activity
है और यह संवाद से अलग है।मैं कई गतिविधियों के साथ कैसे खींच और छोड़ सकता हूं?
अब मैं एक खींचें & ड्रॉप कार्रवाई करता है, तो आप लंबे समय फ्लोटिंग विंडो में क्लिक करें एक ImageView
, आप खींचें और एक अन्य Activity
(या आधार गतिविधि) में यह ड्रॉप कर सकते हैं उदाहरण के लिए, इस विंडो में जोड़ना चाहते हैं। ड्रैग इवेंट को ट्रिगर करने के लिए मुझे OnLongClickListener
का उपयोग करने का प्रयास किया गया है, और ड्रॉप ईवेंट को पकड़ने के लिए OnDragListener
जोड़ा गया है। यहाँ मैं अब तक है:
public class MyFloatableActivity extends FloatActivity {
private ImageView mImg;
private MyDragEventListener mDragListen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.float_activity));
// This imageView is for Drag&Drop test
mImg = (ImageView)findViewById(R.id.drag_img));
mImg.setOnLongClickListener(new ImageView.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ClipData dragData = ClipData.newPlainText("dragtext", "dragtext");
v.startDrag(dragData, new View.DragShadowBuilder(v), null, 0);
return false;
}
});
mImg.setOnDragListener(mDragListen);
switchToFloat(); // Make this activity to float
}
MyDragEventListener वर्ग है:
public class MyDragEventListener implements View.OnDragListener {
private ClipData mDragData;
@Override
public boolean onDrag(View v, DragEvent event) {
final int action = event.getAction();
ImageView img;
if(v instanceof ImageView) {
img = (ImageView)v;
} else{
return false;
}
switch(action) {
case DragEvent.ACTION_DRAG_STARTED:
if(event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
Log.d("DDD", "Drag started!!!");
return true;
}else {
return false;
}
case DragEvent.ACTION_DRAG_ENTERED:
Log.d("DDD", "Entered!!!");
case DragEvent.ACTION_DRAG_LOCATION:
case DragEvent.ACTION_DRAG_EXITED:
return true;
case DragEvent.ACTION_DRAG_ENDED:
case DragEvent.ACTION_DROP:
Log.d("DDD", "Action drop!!!");
return true;
}
return true;
}
कारण मैं कार्यान्वित OnDragListener
आधार गतिविधि में ACTION_DROP
घटना सुनने के लिए जब ImageView
गिरा दिया जाता है। यह मुझे यह निर्धारित करने की अनुमति देता है कि छवि छवि को गंतव्य छवि या लेआउट पर गिरा दिया गया था या नहीं। यहाँ मेरी आधार गतिविधि है:
public class DragAndDropDemo extends Activity {
private ImageView mImg;
private MyDragEventListener mDragListen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drag_and_drop);
//findViewById(R.id.drag_layout).setOnDragListener(mDragListen);
mImg = (ImageView)findViewById(R.id.dest_img);
mImg.setOnDragListener(mDragListen);
}
समस्या DragAndDropDemo
में OnDragListener
लागू नहीं किया जा रहा है, इसलिए मैं अपने आधार गतिविधि में ड्रॉप घटना पकड़ नहीं सकता है। मैंने ड्रैग एंड ड्रॉप के कई उदाहरण देखे हैं, लेकिन सही समाधान के लिए कभी नहीं मिला। मैं सोच रहा हूं कि ड्रैग & एंड्रॉइड में अलग-अलग गतिविधि में ड्रॉप ईवेंट फेंकना संभव है। अगर एंड्रॉइड ऐसा कर सकता है, तो यह क्या होगा?
क्या कोई मदद कर सकता है?