Começando a serie de code snippets, os outros artigos são feitos para quem quer aprender Android do zero, nao exatamente do zero pois é preciso ter uma boa base de Java para se adaptar.
A serie de snippets são para aqueles que já sabem alguma coisa de Android, e essas são dicas uteis para criarem aplicações cada vez mais legais.
Hoje vim falar do componente Gallery, ele é um componente que permite visualizar uma serie de itens com scroll, e como exemplo desse componente vamos criar uma aplicaçao que permita ver fotos em scroll com suporte a titulos.
Nossa tela é simplesmente um TextView seguido de uma Gallery para escolher a imagem, o XML é o seguinte:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/title" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Titulo"
android:layout_gravity="center" />
<Gallery android:id="@+id/gallery" android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
Para usa-lo precisamos criar um Adapter que faz o papel do Model e do Renderer para o nosso componente, ele que constroi os itens que vão para a Gallery.
Primeiro uma entidade simples que representa uma imagem na galeria.
public class Picture {
private String title;
private Bitmap image;
public Picture(String title, Bitmap image) {
this.title = title;
this.image = image;
}
//Getters & Setters
}
E o Adapter para trazer os dados ao Gallery
private class ImageAdapter extends BaseAdapter {
private List<Picture> images;
private Context context;
public ImageAdapter(Context context, List<Picture> images) {
this.images = images;
this.context = context;
}
@Override
public int getCount() {
return images.size();
}
@Override
public Object getItem(int position) {
return images.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView item = null;
if (convertView != null)
item = (ImageView) convertView;
else
item = new ImageView(context);
item.setLayoutParams(new LayoutParams(280, 460));
item.setImageBitmap(((Picture) getItem(position)).getImage());
return item;
}
}
Com ele pronto basta criar nossa Activity e usa-lo como Adapter ao Gallery que declaramos no layout.
Nesse exemplo eu coloquei uma pasta com 7 imagens nomeadas de book1 à book7 para adicionar na galeria.
public class GallerySnippetActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery_snippet);
final TextView title = (TextView) findViewById(R.id.title);
final Gallery gallery = (Gallery) findViewById(R.id.gallery);
final List<Picture> pics = new ArrayList<Picture>();
pics.add(new Picture("Pic 1", load(R.drawable.book1)));
pics.add(new Picture("Pic 2", load(R.drawable.book2)));
pics.add(new Picture("Pic 3", load(R.drawable.book3)));
pics.add(new Picture("Pic 4", load(R.drawable.book4)));
pics.add(new Picture("Pic 5", load(R.drawable.book5)));
pics.add(new Picture("Pic 6", load(R.drawable.book6)));
pics.add(new Picture("Pic 7", load(R.drawable.book7)));
gallery.setAdapter(new ImageAdapter(this, pics));
}
private Bitmap load(int resourceId) {
return BitmapFactory.decodeResource(getResources(), resourceId);
}
}
Com isso vemos nossa tela, ela é até bem legal, mas seria mais interessante o TextView title se atualizar de acordo com o scroll do usuario, e é ai que entra a dica desse snippet. O listener que recebe os Callbacks dos eventos de scroll no Gallery é o OnItemSelectedListener, implementamos ele para pegar a Picture na posição dada e atualizar nossa TextView.
gallery.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
Picture book = pics.get(arg2);
title.setText(book.title);
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});
Com isso é possivel fazer o scroll e atualizar os campos necessarios na tela, essa dica é muito util para fazer algo como, selecionar um CD, um Livro ou o que a imaginação deixar.