2015-04-02 11 views
8

अद्यतन: मेरे सवाल को समझने के लिए, यहाँ मैं क्या प्राप्त करने की आवश्यकता है: होम स्क्रीन पर अनुप्रयोग दराज से खींचें आइकन (यदि संभव हो तो एक gridview में नहीं) में की तरह पिक,खींचें और छोड़ें माउस

enter image description here

पुरानी (यह सिर्फ जानने के लिए कि यह कैसे काम करता है):

मैं से क्लिक करने योग्य माउस खींचकर लागू करने के लिए कोशिश कर रहा हूँ कोई कंटेनर (Listview or Gridview...) एक ही गतिविधि के अंदर के साथ एक customView या किसी अन्य के एक ListView, यहाँ आप को समझने के लिए एक तस्वीर है और अधिक:

enter image description here

लेकिन जब मैं सही क्षेत्र में आइकन डाल मैं डॉन 'टी वस्तु देखते हैं, लॉग में मैं देखें: I/ViewRootImpl﹕ Reporting drop result: true

enter image description here

यहाँ

मेरी कोड:

class MyDragListener implements View.OnDragListener { 
    @Override 
    public boolean onDrag(View v, DragEvent event) { 
     int action = event.getAction(); 
     switch (event.getAction()) { 
      ... 
      case DragEvent.ACTION_DROP: 
       LinearLayoutAbsListView itemo = (LinearLayoutAbsListView)findViewById(R.id.paneko); 
       View child = getLayoutInflater().inflate(R.layout.list_item, null); 
       itemo.addView(child); 
       break; 
      case DragEvent.ACTION_DRAG_ENDED: 
      default: 
       break; 
     } 
     return true; 
    } 
} 

मेरे एक्सएमएल फ़ाइल:

... 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="2" 
    android:background="@android:color/background_dark" 
    android:orientation="horizontal" > 

    <com.moapps.elfassimounir.simple.LinearLayoutAbsListView 
     android:id="@+id/paneuj" 
     android:background="@android:color/background_light" 
     android:orientation="vertical" 
     > 

     <ListView 
      android:id="@+id/listview1" 
      android:layout_width="100dp" 
      android:layout_height="wrap_content" /> 
    </com.moapps.elfassimounir.simple.LinearLayoutAbsListView> 

    <com.moapps.elfassimounir.simple.LinearLayoutAbsListView 
     android:id="@+id/paneko" 
     android:background="@android:color/background_light" 
     android:orientation="vertical" > 

    </com.moapps.elfassimounir.simple.LinearLayoutAbsListView> 
</LinearLayout> 

... 

कोई infos या संदर्भ (ट्यूटोरियल, डॉक्स ...) बहुत उपयोगी

+0

इस लाइन पर आप क्या कर रहे हैं LinearLayoutAbsListView newParent = (LinearLayoutAbsListView) v; आईडी vane3 के साथ दृश्य है? यदि ऐसा है तो इस दृश्य के लिए कोई सूचीदृश्य परिभाषित नहीं होने पर आप इस दृश्य के लिए एडाप्टर कैसे सेट कर रहे हैं? – random

+0

कोई भी कोड आपको लिस्टव्यू के साथ नहीं है, यह जानने के लिए कि मैंने –

+0

क्या किया है फिर से LinearLayoutAbsListView में क्या है vP नया = = LinearLayoutAbsListView) v; आपके एक्सएमएल – random

उत्तर

2

WindowManager के लिए एक दृश्य को जोड़ने पर एक नज़र डालें होगा (WM)। जब आप किसी आइटम को खींचने के लिए लंबे समय तक दबाते हैं, तो उस आइटम का अपना बिटमैप बनाएं और इसे WM में जोड़ें, ताकि इसे सीमा सीमा बाधाओं के बिना स्थानांतरित किया जा सके। जब आप ACTION_UP या समकक्ष ईवेंट प्राप्त करते हैं, तो अपने वर्तमान x, y को वास्तविक दृश्य में मानचित्र करें जो ड्रैग किए गए आइटम के नीचे सीधे है (Rect क्लास सहायक हो सकता है)। फिर आप इस आइटम को उस विशेष दृश्य में जोड़ सकते हैं।

+0

हाय जिग्नेश, पहले ऊपर उठाए गए और इसे समझाए जाने के लिए धन्यवाद, ऐसा लगता है कि आपने एंड्रॉइड लॉन्चर के साथ काम किया है, अब मैं "लॉन्चर 3" के कोड स्रोत का अध्ययन कर रहा हूं, मैं आपका जवाब समझता हूं लेकिन मुझे नहीं पता कि वे कहाँ (कक्षा) बिटमैप बनाते हैं और इसे डब्लूएम में जोड़ते हैं (मैं इसके साथ शुरू करने के लिए एक उदाहरण ढूंढ रहा हूं)। वैसे ACTION_UP ... और रेक्ट क्लास बहुत उपयोगी हैं। –

संबंधित मुद्दे