2013-11-09

GridView を画像ギャラリーにする独自のGalleryAdapterを公開(ダウンロード可)

前回このブログで公開したZoomImageViewと同じく、現在つくっているアプリに必要になったので、独自にプログラムをつくりました。
これは、GridViewをギャラリー化するものなので、『GalleryAdapter』という名前にしました。
今回はこれの使い方をお届けします。

※このGalleryAdapterは現在バージョンアップされ、メソッド名等が変更されています。使い方につきましては基本的には同じですが、変更部分は GalleryAdapter をバージョンアップをご覧ください。

[実行テストの動画]



[出来ること] GridView を使って画像のサムネイルを統一したサイズで表示。さらに画像を読み込んでいる間はくるくる回るローディング画像を表示し、しかも非同期で実行。そして、メモリーが不足しないように読み込みも縮小して画像を取得する。



つまり、「できるだけ使うのが快適に^-^」というコンセプトです。

では、使い方です。
まずは、以下のようにレイアウトxmlの中に<GridView>を作成します。

[Xml]

<GridView
    android:id="@+id/gridview"
    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="32dp"
    android:stretchMode="columnWidth"
    android:gravity="center" />





そして、次にActivity の中に以下のようにGridViewとGalleryAdapterのメンバ変数を作成してください。(これは後で書きますが、onItemClickイベント内からでも参照できるようにするためです。)


[Activity]

public class YourActivity extends Activity {

    private GridView gridView;
    private GalleryAdapter galleryAdapter;

   
    @Override
    protected void onCreate(Bundle savedInstanceState) {}

    //以下省略

}


そして、次にonCreate()内で以下の3つの作業をします。

1.表示したい画像IDをArrayList<Integer>にセット。
2.それを使って GalleryAdapter のインスタンスをつくる。
3.さらにそれをGridViewにセット。


[onCreate]


// 1.表示したい画像IDをArrayList<Integer>にセット。

ArrayList<Integer> resourceIds = new ArrayList<Integer>();
resourceIds.add(R.drawable.example0);
resourceIds.add(R.drawable.example1);
resourceIds.add(R.drawable.example2);


// 2.それを使って GalleryAdapter のインスタンスをつくる。

galleryAdapter = new GalleryAdapter(this, resourceIds);


// 3.さらにそれをGridViewにセット。

gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(galleryAdapter);



これでオッケーです。
では、後の細かいところは以下の3つのメソッドで紹介しましょう。


[メソッド]

・setProgressBarStyle(int style)

画像が読み込まれるまでの間に表示するくるくる回るローディング画像を大きさを設定します。
パラメータは、以下の4つの定数を使ってください。

GalleryAdapter.PROGRESS_STYLE_NONE ・・・画像なし
GalleryAdapter.PROGRESS_STYLE_SMALL ・・・画像小GalleryAdapter.PROGRESS_STYLE_MEDIUM ・・・画像中
GalleryAdapter.PROGRESS_STYLE_LARGE ・・・画像大


・add(int resourceId)
・add(int resourceId, int index)

ギャラリーに画像を追加します。画像のIDを使います。
上のものはギャラリーの最後に、下は好きな位置に追加ができます。


・remove(index)

ギャラリーから画像を削除します。
注:ここは画像IDではなく、何番目の画像かを指定してください。


メソッドは以上です。

では、 onItemClickイベント時(ギャラリーの中の画像をタッチした時)の注意点を最後にサンプルを使って説明します。


[onItemClick]

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        galleryAdapter.add(R.drawable.select_player_rabbit_unavailable, position);    //(1)
        galleryAdapter.remove(position);    //(2)
        gridView.invalidateViews();    //(3)
               
    }
           
});


まず、(1)(2)(3) で使われている galleryAdapter と gridView はActivityのメンバ変数にすることでイベント内からでも参照ができます。

そして、(3)の gridView.invalidateViews();。
これを呼ぶことで追加 or 削除した後の GridView をリフレッシュすることができます。


以上になります。
今後はBitmap からでも追加できるようにしたいと考えています。
では、ダウンロードはいつものごとくGitHubからどうぞ♪

[GitHub]
https://github.com/SUKOHI/GalleryAdapter


お疲れ様でした。


0 件のコメント:

コメントを投稿