10

Was ich erreichen möchte: Ich möchte eine Ansicht in einem scrollbaren Layout (Recyclerview mit GridlayoutManager) mit Kacheln (Views) drin haben. Durch Ziehen und Ablegen eines Elements innerhalb der RecyclerView sollte die Position des Symbols angepasst und mit den anderen Elementen ausgetauscht werden. Wenn ein Ziehen beginnt, wird ein Symbol über der RecyclerView in ein Papierkorbsymbol geändert, und wenn Sie die Ansicht auf dieses Symbol ziehen, wird es aus dieser RecyclerView gelöscht.Drag & Drop Ansicht außerhalb von Recyclerview

Initial stateStarting to drag View5dragging View5 to trash iconView5 was deleted and other Views moved along

habe ich versucht, diese excellent tutorial, aber ich habe nicht einen Weg finden, wie außerhalb der Recyclerview als ItemTouchHelper.Callback verwendet nur Recycler.ViewHolder Elemente als mögliche Ziele zu handhaben ziehen.

Die Methode interpolateOutOfBoundsScroll() gibt eine Rückmeldung, wenn sich die Ansicht außerhalb der Grenzen bewegt, gibt aber nur die Gesamtgröße zurück, die außerhalb des Bildschirms liegt, aber keine Koordinaten. Wenn Sie versuchen, die Ansicht aus dem Recyclerview zu ziehen, führt das immer dazu, dass die Ansicht abgeschnitten wird, wo sie die Grenzen des Recyclerview überschreitet.

Hat jemand eine Idee, wie ich diesen Effekt erreichen könnte?

Antwort

4

Sie sind an die RecyclerView Grenzen gebunden. Sie haben mehrere Möglichkeiten:

  1. die RecyclerView Make ‚s Layout Höhe match_parent und auf der Oberseite des oberen Ansicht zu sein (es ist ein Toolbar?) Und ein klebriges Header der gleichen Größe hinzufügen und haben ein leeres transparentes Layout Auf diese Weise könntest du sie ziehen und sehen, wie der Gegenstand dort schwebt.

  2. Anstatt ein Element auf ein Mülltonnensymbol zu ziehen, das zu nahe an einem legitimierten Objekt oben rechts liegt, klicken Sie lange, um das Objekt auszuwählen (und ein Signal wie ein Häkchen oder eine rote Maske anzuwenden) und machen den Müll erscheinen und löschen uppon Klick (und vielleicht Multi Element löschen zulassen)

+0

Vielen Dank für Ihre Antwort! Die obere Ansicht ist ein 'RelativeLayout', das einige' Textviews', 'Imageviews' und auch' Imageview' enthält, die in einen Papierkorb umgewandelt werden sollen. Ich mag Ihre Idee mit dem sticky header. Wenn der Papierkorb 'Imageview' das einzige Element im Sticky-Header ist und diesen nicht vollständig ausfüllt, gibt es eine Möglichkeit, zu verhindern, dass Benutzer die Ansichten an die Positionen neben der Zeile" Imageview "ziehen? Ich werde das jetzt ausprobieren – Eve

+0

@Eve einfach nicht tauschen sie, wenn die Zielposition in der Kopfzeile ist – gilgil28

+0

immer noch auf dieser einen denken, gibt es keine Möglichkeit, wie mit dem klassischen Ansatz von [Google] (http://developer.android Englisch: www.doc-o-matic.com/webhelp/opHTML.html) um einen Zieh - Schatten zu definieren, so dass nur der Schatten gezogen wird und nicht die Ansicht selbst? – Eve

6

Sie erreichen diese einfach durch dieses Attribut für die Eltern des RecyclerView:

android:clipChildren="false" 

Edit: Danke Adam Katz, ich weiß nicht warum, aber manchmal auch du muss dies zum RecyclerView hinzufügen, damit es funktioniert:

android:clipToPadding="false" 
+1

wow ich kann nicht glauben, niemand hat dies kommentiert. Nur hinzugefügt, ist es hilfreich hinzuzufügen android: clipChildren = "false" android: clipToPadding = "false" –

+0

Können Sie mehr erklären? Haben Sie Beispielcode? – Rajat