2015-04-02 9 views
8

Update: meine Frage zu verstehen, hier ist das, was ich erreichen müssen: Ziehen Sie das Symbol aus dem App Schublade zu Home-Bildschirm (wenn möglich nicht in einer Gridview) wie in der pic,Drag and Drop Icons Home Screen

enter image description here

Alt (dies ist nur zu lernen, wie das funktioniert):

ich versuche, ziehen anklickbaren Symbole zu implementieren aus ein ListView zu einem customView ohne Behälter (Listview or Gridview...) innerhalb der gleichen Aktivität oder eine andere, ist hier ein Bild für Sie zu verstehen:

enter image description here

aber wenn ich legte das Symbol im rechten Bereich i don ‚t das Objekt, im Protokoll i sehen: I/ViewRootImpl﹕ Reporting drop result: true

enter image description here

hier mein Code:

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; 
    } 
} 

Meine XML-Datei:

... 
<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> 

... 

Alle Infos oder Referenzen (Tutorien, Dokumente ...) würde

+0

Was machst du in dieser Zeile? LinearLayoutAbsListView newParent = (LinearLayoutAbsListView) v; , ist v die Ansicht mit ID-Fenster3? Wenn ja, wie stellen Sie den Adapter für diese Ansicht ein, wenn für diese Ansicht keine Listenansicht definiert ist? – random

+0

nein dieser Code ist mit dem Listview, nur um Ihnen eine Idee zu geben, was ich getan habe –

+0

Wieder was ist v in LinearLayoutAbsListView newParent = (LinearLayoutAbsListView) v; in Bezug auf Ihre xml – random

Antwort

2

Werfen Sie einen Blick sehr hilfreich sein, einen Blick auf den Windowmanager (WM bei Zugabe). Wenn Sie lange auf ein Element ziehen, das gezogen werden soll, erstellen Sie ein eigenes Bitmap des Elements, und fügen Sie es dem WM hinzu, sodass es ohne Begrenzungsanforderungen für die Ansicht verschoben werden kann. Wenn Sie ein ACTION_UP oder ein gleichwertiges Ereignis erhalten, ordnen Sie Ihr aktuelles x, y der tatsächlichen Ansicht zu, die sich direkt unter dem gezogenen Element befindet (Rect-Klassen können hilfreich sein). Sie können dieses Element dann zu dieser bestimmten Ansicht hinzufügen.

+0

Hallo Jignesh, zuerst upvoted und danke für die Erklärung, es scheint, als ob Sie mit Android Launcher gearbeitet haben, jetzt studiere ich die Code-Quelle von "launcher3", Ich verstehe Ihre Antwort, aber ich kann nicht finden, wo (Klasse) sie die Bitmap erstellt haben und es dem WM hinzufügen (ich suche nach einem Beispiel, um damit zu beginnen). übrigens ACTION_UP ... und Rect-Klasse sind sehr hilfreich. –