GridViewを使って画像ファイルをグリッド表示する


GridViewはデータをグリッド状(格子状)に表示するためのビューです。
画像などのデータをサムネイルのように表示したい場合に利用できます。

詳細は続きからどうぞ。

GirdViewで扱うデータはBaseAdapterを継承したクラスを使って取得します。
以前紹介したGalleryと同じような手順になりますので、併せてご覧下さい。

レイアウトファイル

まず、レイアウトファイルでGridViewを定義します。

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
    android:id="@+id/myGrid"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:columnWidth="60dp"
    android:stretchMode="columnWidth"
    android:gravity="center" />

BaseAdapterの拡張

res/drawableに保存してある画像ファイルを返すようにBaseAdapterを拡張します。
下記の4つのメソッドをオーバーライトしています。

getViewメソッド
getViewメソッドをオーバーライドして画像を表示するためのImageViewを返すようにします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public View getView(int position, View convertView, ViewGroup parent) {
    // 画像表示用のImageView
    ImageView imageView;
 
    // convertViewがnullならImageViewを新規に作成する
    if (convertView == null) {
        imageView = new ImageView(gridView.this);
        imageView.setLayoutParams(new GridView.LayoutParams(50, 50));
    // convertViewがnullでない場合は再利用
    } else {
        imageView = (ImageView) convertView;
    }
 
    // ImageViewに画像ファイルを設定
    imageView.setImageResource(mThumbIds[position]);
 
    // ImageViewを返す
    return imageView;
}

setImageResourceメソッドで指定しているmThumbIdsは表示する画像のリソースIDを定義したint配列です。
何番目の要素かを示す引数positionをインデックスにすることで表示する画像のリソースIDを取得できます。

1
2
3
4
5
6
private Integer[] mThumbIds = {
        R.drawable.img_01,
        R.drawable.img_02,
        R.drawable.img_03,
        (以下繰り返し...)
};

また、convertViewがnullでない場合はImageViewを再利用することで無駄な処理をさせないようにしています。

getCountメソッド
getCountメソッドでは用意した画像ファイルの数を返すようにmThumbIdsの大きさを返すようにしています。

1
2
3
4
public final int getCount() {
    // mThumbIdsの大きさを返す
    return mThumbIds.length;
}

getItemメソッドとgetItemIdメソッド
getItemメソッドとgetItemIdメソッドは今回のサンプルでは使用していないので、とりあえずpositionを返すようにしています。

1
2
3
4
5
6
7
public final Object getItem(int position) {
    return position;
}
 
public final long getItemId(int position) {
    return position;
}

setAdapterでアダプタを設定する

最後にGridViewにsetAdapterを設定して実際に画像を表示します。

1
2
3
// グリッドにアダプタを設定する
mGrid = (GridView) findViewById(R.id.myGrid);
mGrid.setAdapter(new myAdapter());
One Comment