2012-02-26 2 views
8

Sto lavorando a un'app in cui vorrei implementare la funzionalità di scorrimento a sinistra in ListView - simile a ciò che vediamo nella barra delle notifiche di Android 4.0, nell'elenco delle app recenti o nelle schede del browser. Voglio eseguire l'app sui dispositivi con Android 2.2 o versioni successive. Vedi la seguente immagine. Voglio anche cambiare la trasparenza dell'elemento che viene trascinato via, proprio come in ICS.Come implementare Android 4.0 come swipe per eliminare la funzionalità in ListView?

Android 4.0 Web Browser - Swiping away the open tabs http://img19.imageshack.us/img19/3605/screenshot2012022617290.png

ho controllato la fonte del browser ICS http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.1_r1/com/android/browser/TabScrollView.java?av=f ma non riusciva a capire quale classe particolarmente responsabile dell'esecuzione questa funzionalità.

Qualcuno può indicarmi la giusta direzione qui? Possiamo farlo utilizzando Android Compatibility Library? Per favore mi faccia sapere. Grazie molto.

risposta

0

So che questa è una domanda piuttosto vecchia, ma per chi ancora sta cercando questo, è possibile dare un'occhiata alla biblioteca di Roman Nurik qui: https://github.com/romannurik/Android-SwipeToDismiss

Questo mostra come creare il comportamento richiesto per la visualizzazione elenco e per le viste normali.

3

Ho pensato di implementare anche questa funzione, ma non l'ho ancora fatto. Quindi l'unica cosa che posso fornire sono alcune idee su come I si avvicinerebbe a questo problema. Se alla fine ho scritto del codice, lo posterò qui.

  1. La classe principale necessaria è un adattatore personalizzato che estenda un ListAdapter (ArrayAdapter, SimpleCursorAdapter ecc.).
  2. L'adattatore applica View.OnTouchListener a tutte le sue viste.
  3. Ogni volta che l'ascoltatore rileva uno scorrimento orizzontale dx, chiama concernedView.offsetLeftAndRight(dx) (che renderà trascinabile la vista). Ovviamente l'adattatore deve salvare l'offset orizzontale corrente per la vista. Se l'utente stava trascinando una vista e rimuove il suo dito dallo schermo, il TouchListener rileverà anche questo e avvierà un'animazione a scorrimento. Usando l'offset corrente possiamo anche calcolare un valore alfa, quindi la vista scomparirà quando si avvicina ai bordi dello schermo.
  4. Se una voce dell'elenco viene alla fine respinta dall'utente, diventa un po 'complicata, e non sono ancora sicuro di come implementare la seguente azione: Il contenuto dell'elenco deve essere aggiornato (o l'adattatore deve ignorare il voci respinte) e le visualizzazioni che erano al di sotto di quella che è stata respinta devono librarsi verso l'alto al fine di colmare il divario. Penso che potrebbe funzionare per permettere a ListView di caricare il nuovo contenuto, ma questo colmerebbe immediatamente il gap. Per evitarlo, inizierei quindi un'animazione che permetta a tutte le viste interessate di passare dalla loro posizione precedente (dove abbiamo ancora il gap) alla loro posizione corrente (dove il gap è riempito).

Queste sono solo alcune delle mie considerazioni sul problema che potrebbero aiutare alcune persone a iniziare a lavorare sul problema. Come ho detto, probabilmente lo implementerò in futuro e naturalmente inserirò il codice qui.
Apprezzerei qualsiasi commento nei commenti, ma non voglio spiegare esaurientemente ogni singolo aspetto della mia idea, che mi richiederebbe troppo tempo;)

+0

Bene, questo è un inizio. Cercherò di creare qualcosa basato su questo e aggiornerò qui se avrò successo. – iamronak

+3

Prima di rimuovere la vista, animare la sua altezza su 0. Questo farà crollare piacevolmente la lista. Quindi una notifica non sarà uno snap irritante. – Hounshell

Problemi correlati