10

Cosa voglio ottenere: Voglio avere una vista all'interno di un layout scorrevole (Recyclerview con GridlayoutManager) con riquadri (Visualizzazioni) al suo interno. Trascinare e rilasciare un oggetto all'interno di RecyclerView dovrebbe regolare la posizione dell'icona e scambiare con gli altri elementi. Quando si avvia un trascinamento, un'icona sopra RecyclerView si trasforma in icona del cestino e trascinando la vista su questa icona la elimina da questo RecyclerView.Trascinare la vista all'esterno di Recyclerview

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

ho provato questo excellent tutorial, ma non ho trovato un modo per gestire il trascinamento di fuori del Recyclerview come ItemTouchHelper.Callback utilizza solo Recycler.ViewHolder elementi come possibili obiettivi.

Il metodo interpolateOutOfBoundsScroll() fornisce un feedback se la vista si sposta oltre i limiti, ma restituirà solo la dimensione totale che è fuori dallo schermo, ma non le coordinate. Inoltre, il tentativo di trascinare la vista all'esterno di Recyclerview comporta sempre il taglio della vista in cui passa i bordi dello Recyclerview.

Qualcuno ha un'idea di come ottenere questo effetto?

risposta

4

Sei vincolato dai limiti RecyclerView. Sono disponibili diverse opzioni:

  1. Trucco altezza layout di 's il RecyclerView-match_parent e di essere in cima alla vostra vista superiore (è un Toolbar?) E aggiungere un colpo di testa appiccicosa delle stesse dimensioni e hanno un vuoto layout trasparente. In questo modo potresti trascinarli e vedere l'oggetto fluttuare laggiù.

  2. Invece di trascinare un elemento in un'icona del bidone della spazzatura che si trova troppo vicino a un oggetto in alto a destra legittimo, fare un lungo clic per selezionare l'elemento (e applicare un segnale come un segno di spunta o una maschera rossa) e rendere la spazzatura può apparire ed eliminare uppon clic (e forse permettere a più voce cancellazione)

+0

Grazie per la vostra risposta! La vista superiore è un 'RelativeLayout' che contiene alcuni' Textview ', 'Imageviews' e anche' Imageview' che dovrebbe trasformarsi in un cestino. Mi piace la tua idea con l'intestazione appiccicosa. Se il cestino "Imageview' è l'unico elemento nell'intestazione appiccicosa e non lo riempie completamente, c'è un modo per impedire agli utenti di trascinare le viste nelle posizioni accanto alla riga" Imageview' del cestino? Lo proverò ora, – Eve

+0

@Eve, non scambiarli se la posizione di destinazione è nell'intestazione – gilgil28

+0

continuando a pensare a questo, non c'è alcun modo con l'approccio classico da [Google] (http://developer.android .com/guide/topics/ui/drag-drop.html) per definire un'ombra di trascinamento in modo che solo l'ombra venga trascinata non dalla vista stessa? – Eve

6

È possibile raggiungere questo semplicemente insieme questo attributo per il genitore del RecyclerView:

android:clipChildren="false" 

Edit: grazie Adam Katz, non so perché ma a volte tu è necessario aggiungere questo a RecyclerView per farlo funzionare:

android:clipToPadding="false" 
+1

wow, non credo che nessun altro abbia commentato questo. Appena aggiunto, è utile aggiungere android: clipChildren = "false" android: clipToPadding = "false" –

+0

Puoi spiegare di più? Hai un codice di esempio? – Rajat

Problemi correlati