2013-04-05 14 views
19

Attualmente sto utilizzando il widget Galleria per visualizzare un elenco scorrevole di miniature. Ogni miniatura ha un colore di sfondo e una sovrapposizione di testo. (È un selettore di colori).Opzioni per la sostituzione della Gallery deprecata

Tuttavia a partire da API version 16, the gallery is deprecated.. A quanto ho capito, i telefoni con versioni API superiori a 16 non sono garantiti per avere il widget della galleria.

Vorrei utilizzare un viewpager, ma questo mostra solo una vista alla volta e voglio mostrare anche le viste adiacenti. Una vista di scorrimento orizzontale può farlo, ma non si aggancia all'opzione più vicina come farà una galleria.

Ho cercato i widget esistenti e non ne ho trovato. Hai qualche suggerimento su quale widget dovrei scegliere?

+0

si consiglia di utilizzare il minerale ViewPager è possibile utilizzare il HorizzontalScrollView (si tratta di una libreria esterna) – Blackbelt

risposta

0

Hai provato coverflow? Puoi usare questo. https://github.com/Polidea/android-coverflow Spero che questo possa aiutarti.

o

È inoltre possibile utilizzare l'arricciatura della pagina per swipping.

+0

Perfetto, grazie! –

+0

Sei sempre wc. @ToddDavies – Shadow

+66

android-coverflow estende Gallery, questa non è davvero una soluzione. – Raanan

8

Ho utilizzato un ViewPager con il suo clipToPadding impostato su valori di riempimento falsi e uguali a sinistra e a destra. Ciò rende una pagina più piccola del viewpager e la centra al suo interno.

Quindi ho impostato viewPager.setPageMargin su un valore negativo per consentire la visualizzazione delle pagine su entrambi i lati. In questo modo hai una pagina centrata con gli altri che mostrano.

Quindi è anche possibile aggiungere animazioni di fantasia impostando PageTransformer sul ViewPager (viewPager.setPageTransformer). Ho eseguito una rotazione e una scala utilizzando il float fornito in PageTransformer per emulare un effetto simile a un carosello.

Spero che questo sia utile per qualcuno. Inoltre penso che la Galleria sia stata deprecata perché il lancio non sembra giusto. Non hai idea di quale oggetto sarà selezionato dopo un'avventura.

+0

dove devo iniziare. Bisogno di un tut/link @Pepjin –

+1

Spiegazione più dettagliata su come eseguire questa operazione: http://stackoverflow.com/questions/13914609/viewpager-with-previous-and-next-page-boundaries – Taiko

+0

Collegamento diretto a un [progetto github ] (https://gist.github.com/devunwired/8cbe094bb7a783e37ad1) con codice di lavoro menzionato nella risposta @Taiko condivisa. – Lamorak

13

Una buona opzione per sostituire la Gallery è un ViewPager, funziona come listview o gridview, è necessario creare il proprio adattatore che estenda PagerAdater e un elemento di layout. Lo uso già con questo codice che allego di seguito, e funziona perfettamente. buona risposta al tocco, spero che questo possa aiutarti !!!

LAYOUT

<android.support.v4.view.ViewPager 
    android:id="@+id/gallery_item" 
    android:layout_width="fill_parent" 
    android:layout_height="709dp" 
    android:layout_below="@+id/relative_headerBar" 
    > 

</android.support.v4.view.ViewPager> 

CLASSE CODICE

private ViewPager gallery; 
gallery = (ViewPager) findViewById(R.id.gallery_item); 

gallery = (ViewPager) findViewById(R.id.gallery_item); 
    lista_galeria = new ArrayList<ObjectVerGaleria>(); 

    int i=0; 
    for(i=0;i<listImages.length;i++) 
    {  
     ObjectVerGaleria objV = new ObjectVerGaleria(); 
     objV.setUrlImg(listImages[i]); 
     lista_galeria.add(objV); 
    } 
    gallery.setAdapter(new AdapterVerGaleria(ctx, lista_galeria)); 

    gallery.setOnPageChangeListener(new OnPageChangeListener() 
    { 

     public void onPageSelected(int pos) 
     { 
      String pathImage = listImages[pos].toString(); 

      currentPosFront = pos; 
      Log.d("setOnItemSelectedListener>>","path:"+pathImage); 

     } 

     public void onPageScrolled(int arg0, float arg1, int arg2) 
     { 
      // TODO Auto-generated method stub 

     } 

     public void onPageScrollStateChanged(int arg0) 
     { 
      // TODO Auto-generated method stub 

     } 
    }); 

ADATTATORE

public class AdapterVerGaleria extends PagerAdapter { 

private Activity ctx; 
private ArrayList<ObjectVerGaleria> dataList; 

public AdapterVerGaleria(Activity act, ArrayList<ObjectVerGaleria> lista) { 

    ctx = act; 
    dataList = lista; 
} 

public int getCount() { 
    return dataList.size(); 
} 

public Object getItem(int pos) { 
    return pos; 
} 

@Override 
public Object instantiateItem(View collection, int pos) 
{ 
    ImageView foto = new ImageView(ctx); 



     //foto.setLayoutParams(new ViewPager.LayoutParams(Gallery.LayoutParams.FILL_PARENT, Gallery.LayoutParams.FILL_PARENT)); 
     foto.setScaleType(ImageView.ScaleType.FIT_XY); 
     Utils.fetchDrawableOnThread(Utils.getPath(ctx)+"/"+dataList.get(pos).getUrlImg(), foto, true); 
     ((ViewPager)collection).addView(foto); 


    return foto; 
} 

@Override 
public void destroyItem(View collection, int position, Object view) 
{ 
    ((ViewPager)collection).removeView((ImageView)view); 

} 

public long getItemId(int pos) { 
    return pos; 
} 



@Override 
public boolean isViewFromObject(View view, Object object) 
{ 
    // TODO Auto-generated method stub 
    return view == ((ImageView)object); 
} 

}

+0

Grazie, funziona meravigliosamente. Ottima risposta al tocco, come hai scritto tu. Solo il metodo pubblico AdapterVerGaleria.getItem (int) era qualcosa che ho rimosso in quanto non sembra servire a nessuno scopo. – Karl

+6

cos'è ObjectVerGaleria? – djdance

+0

Come funziona il confronto == in isViewFromObject? Immagino che non venga mai chiamato perché dovresti usare equals() per confrontare – Rarw

2

Qualcuno ha scritto in sostituzione di galleria che ricicla di vista.È basato sul codice della galleria originale, quindi dovrebbe essere un miglioramento. ecco il link: https://github.com/falnatsheh/EcoGallery

+0

Importato nel mio spazio di lavoro e giocato con esso. Semplice, pulito, sembra funzionare bene. Grazie per questa risposta! – slogan621

2

migliore soluzione attuale è RecyclerView

+0

Si prega di elaborare la soluzione .. come RV è la soluzione? –

Problemi correlati