Controllo Raccolta Xamarin.Android

Gallery è un widget di layout utilizzato per visualizzare gli elementi in un elenco a scorrimento orizzontale e posiziona la selezione corrente al centro della visualizzazione.

Importante

Questo widget è stato deprecato in Android 4.1 (livello API 16).

In questa esercitazione verrà creata una raccolta di foto e quindi verrà visualizzato un messaggio di tipo avviso popup ogni volta che viene selezionato un elemento della raccolta.

Dopo aver impostato il Main.axml layout per la visualizzazione contenuto, viene Gallery acquisito dal layout con FindViewById. La Adapter la proprietà viene quindi utilizzata per impostare un adattatore personalizzato ( ImageAdapter) come origine per tutti gli elementi da visualizzare nel dallery. L'oggetto ImageAdapter viene creato nel passaggio successivo.

Per eseguire un'operazione quando si fa clic su un elemento nella raccolta, viene sottoscritto un delegato anonimo EventoItemClick . Mostra un Toast che visualizza la posizione di indice (in base zero) dell'elemento selezionato (in uno scenario reale, la posizione può essere usata per ottenere l'immagine di dimensioni complete per altre attività).

Prima di tutto, sono presenti alcune variabili membro, tra cui una matrice di ID che fanno riferimento alle immagini salvate nella directory delle risorse disegnabili (Risorse/drawable).

Next è il costruttore della classe, dove Context per un'istanza ImageAdapter di viene definita e salvata in un campo locale. Successivamente, implementa alcuni metodi obbligatori ereditati da BaseAdapter. Costruttore e Count proprietà sono autoesplicativi. Normalmente GetItem(int) deve restituire l'oggetto effettivo nella posizione specificata nell'adattatore, ma viene ignorato per questo esempio. Allo stesso modo GetItemId(int) deve restituire l'ID riga dell'elemento, ma non è necessario.

Il metodo esegue il lavoro per applicare un'immagine a un oggetto ImageView che verrà incorporato nel Gallery In questo metodo, il membro Context viene usato per creare un nuovo ImageViewoggetto . La ImageView viene preparato applicando un'immagine dalla matrice locale di risorse disegnabili, impostando Gallery.LayoutParams altezza e larghezza per l'immagine, impostando la scala in modo che si adatti a ImageView dimensioni e infine impostare lo sfondo per usare l'attributo stilibile acquisito nel costruttore.

Vedere ImageView.ScaleType per altre opzioni di ridimensionamento delle immagini.

scenario

Avviare un nuovo progetto denominato HelloGallery.

Screenshot of new Android project in the New Solution dialog

Trova alcune foto che vuoi usare o scarica queste immagini di esempio. Aggiungere i file di immagine alla directory Resources/Drawable del progetto. Nella finestra Proprietà impostare l'azione di compilazione per ogni su AndroidResource.

Aprire Resources/Layout/Main.axml e inserire quanto segue:

<?xml version="1.0" encoding="utf-8"?>
<Gallery xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gallery"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

Aprire MainActivity.cs e inserire il codice seguente per OnCreate() Metodo:

protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);

    // Set our view from the "main" layout resource
    SetContentView (Resource.Layout.Main);

    Gallery gallery = (Gallery) FindViewById<Gallery>(Resource.Id.gallery);

    gallery.Adapter = new ImageAdapter (this);

    gallery.ItemClick += delegate (object sender, Android.Widget.AdapterView.ItemClickEventArgs args) {
        Toast.MakeText (this, args.Position.ToString (), ToastLength.Short).Show ();
    };
}

Creare una nuova classe denominata ImageAdapter sottoclassi BaseAdapter:

public class ImageAdapter : BaseAdapter
{
    Context context;

    public ImageAdapter (Context c)
    {
          context = c;
    }

    public override int Count { get { return thumbIds.Length; } }

    public override Java.Lang.Object GetItem (int position)
    {
          return null;
    }

    public override long GetItemId (int position)
    {
          return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public override View GetView (int position, View convertView, ViewGroup parent)
    {
          ImageView i = new ImageView (context);

          i.SetImageResource (thumbIds[position]);
          i.LayoutParameters = new Gallery.LayoutParams (150, 100);
          i.SetScaleType (ImageView.ScaleType.FitXy);

          return i;
    }

    // references to our images
    int[] thumbIds = {
            Resource.Drawable.sample_1,
            Resource.Drawable.sample_2,
            Resource.Drawable.sample_3,
            Resource.Drawable.sample_4,
            Resource.Drawable.sample_5,
            Resource.Drawable.sample_6,
            Resource.Drawable.sample_7
     };
}

Eseguire l'applicazione. Dovrebbe essere simile allo screenshot seguente:

Screenshot of HelloGallery displaying sample images

Riferimenti

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.