2010-12-14 11 views
7

Auf dem Android-Homescreen ist es möglich, die Elemente zu löschen, indem Sie sie in den Papierkorb ziehen.Wie bekomme ich das Homescreen-Verhalten von Drag in Bin, in meiner eigenen Anwendung?

Ich möchte ähnliche Funktionalität in meiner eigenen Anwendung haben, wo ich eine Ansicht mit benutzerdefinierten Ansichtselementen habe, die ich Drag & Drop-Benutzer sein möchte.

Gibt es eine einfache Möglichkeit, diese Funktionalität zu implementieren? Oder könnte mir jemand Hinweise geben, die mich auf den möglicherweise schwierigen Weg führen können?

+0

Süß .. Ich mag würde wissen, wie das zu tun .. Lass mich etwas recherchieren, ich melde mich bei dir, wenn ich etwas finde. – Shardul

+0

Schön! Ich habe jetzt einen funktionierenden Proof of Concept. Bin an Ihrer Umsetzung interessiert. – Peterdk

+1

Die Launcher-Anwendung in Android, auf die Sie sich beziehen, ist Open Source. Ich denke, Sie können vielleicht von ihrer Implementierung lernen, indem Sie sich den Quellcode anschauen. http://android.git.kernel.org/?p=platform/packages/apps/Launcher.git;a=summary –

Antwort

1

Ich nehme an, Sie haben eine Homescreen-ähnliche Anwendung, zumindest eine Ansicht mit Elementen, die Sie ziehen und ablegen möchten. Wie Austyn Mahoney sagt in seinem Kommentar können Sie auf den Android Open Source Homescreen-Code verweisen. Da Drag and Drop jedoch eine einfach zu implementierende Funktion ist, können Sie auch selbst damit umgehen.

Sie müssen Ihre Artikel in z. ein Array. Dann gehen Sie die Ereignistypen durch.

Auf jeder ACTION_DOWN müssen Sie überprüfen, ob ein Element vom Benutzer getroffen wurde. Z.B. Wenn wir Kreise als Elemente haben, müssen wir die aktuellen ACTION_DOWN-Koordinaten erfassen, damit wir prüfen können, ob sie sich innerhalb des Elements befinden und die ID des Elements erhalten, das der Benutzer gemäß den ACTION_DOWN-Koordinaten ziehen möchte.

Unter ACTION_MOVE müssen Sie nur die aktuellen x- und y-Koordinaten an das Element übergeben, um es an der neuen Position neu zu zeichnen.

Nun, das ist nur die Drag-and-Drop-Funktion. Jetzt müssen Sie testen, ob sich der Artikel in einem bestimmten Sektor befindet, den Sie als Bin bezeichnen. Sie definieren also ein Rechteck auf Ihrem Bildschirm. In ACTION_MOVE testest du den Gegenstand in diesem Bereich, das ist alles.

nur einige Beispiel-Code für Drag & Drop:

public boolean onTouchEvent(MotionEvent event){ 
    int itemID = 0; 
    int X = (int)event.getX(); 
    int Y = (int)event.getY(); 

     switch(event.getAction()){ 
      case MotionEvent.ACTION_DOWN: 
       for(Items item : dragable_item){ 

        //center coords of the item 
        int centerX = item.getX() + 25; 
        int centerY = item.getY() + 25; 

        //calculate the distance (radius) from touch to item 

        //get item to drag 
        if(distance < 20){ 
         itemId = item.getID(); break; 
        } 
       } 
      break; 
      case MotionEvent.ACTION_MOVE: 
       if(itemID > 0){ 
        Items[itemID-1].setX(X-25); 
        Items[itemID-1].setY(X-25); 
       } 
      break; 
     } 
    } 
    invalidate(); return true; 
} 

Wenn Sie wand mehr in den Code zu graben, haben einen Blick auf anddev.org - drag and drop.

+0

Sehr informative Antwort. – Peterdk

Verwandte Themen