2012年8月29日水曜日

フォトギャラリーの実装について(Android)

色々とやり方はあるみたいですが大きく2つのやり方がありそうなんで試してみました。


まずひとつ目。
Intentからギャラリーを呼び出してそこから画像を選択する方法です。
これはAndroidの機能をそのまま使ってフォトギャラリーを呼び出し選択させる。というやり方。
ギャラリーの呼び出しは
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_PICK);
startActivityForResult(intent, REQUEST_GALLEY);

これだけです。
簡単に説明すると
setType("image/*) と指定することで対象を保存されている画像にします。
setAction(Intent.ACTION_PICK) と指定することでデータを対象データを取得するためのアプリを絞ることができます。
ここで使うとすると ACTION_PICK か ACTION_GET_CONTENT の2種類があると思いますがここでは ACTION_PICK を使用しています。

違いは下図のようなかんじ。
ACTION_PICK      

 ACTION_GET_CONTENT


あとは onActivityResult メソッドをオーバライドして画像を選択したときの処理を加えるだけです。



次にふたつ目。
ContentResolver で画像データを読み込む方法です。
ContentResolver で外部メディアの画像データにアクセスし情報を取得し、あとが GridView とかを使って画面に表示するやり方。

ここではサムネイル表示(GridView)を使用して表示したいので BaseAdapter を拡張して実装しました。

mResolver = getContentResolver();
Cursor cursor = mResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);

while (cursor.moveToNext()) {
    String name = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.TITLE));
    long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID));

    (省略)
}

cursor.close();

ContentResolver#query を使用してメディから情報を取得してあとはぐるぐる回しながらファイル名とIDを取得します。

これらを用いて GridView に表示すればOK。




この2つで参考にした記事


一応、すべてのソースをGitHubにも上げてますので興味のある方はダウンロードしてみてください。

ひとつ目のサンプル(PhotoGalleySample)
https://github.com/hayashida/PhotoGalleySample

ふたつ目のサンプル(PhotoGridSample)
https://github.com/hayashida/PhotoGridSample




0 件のコメント:

コメントを投稿