2013-11-09

GalleryAdapter をバージョンアップ(ダウンロード可)

昨日の今日でなんとも言いがたいですが、アプリ制作をすすめる上で前回『GridView を画像ギャラリーにする独自のGalleryAdapterを公開』で公開したGalleryAdapter をバージョンアップしました。-_-;

と、いうのも前回バージョンはリソースIDからのみ画像を設定できていたのですが、どうしてもビットマップからでも追加できるようにしないといけなくなったためです。

今回大幅に修正をしたので、(ほぼ全部の)メソッド名やコンストラクタの引数などが変更になりました。。スミマセンm_ _m
新しいメソッドも追加しております。

[テスト動画は前回と一緒です。^-^]


[変更箇所] Bitmapからでもギャラリーに画像を追加できるようになり、リソースIDとビットマップが混在することができるようになっています。また、一気に全てを削除できる removeAll()や画像を入れ替えるreplace()メソッドも追加しました。



では、使い方です。
メソッド名が変更になっていますが、基本的には前回バージョンと変わりません。

まず、インスタンスの部分。
コンストラクタの引数が2つから1つに変更になっています。

GalleryAdapter galleryAdapter = new GalleryAdapter(this);

これは、リソースIDとビットマップの追加をするための措置で、追加にはそれぞれ専用のメソッドを用意しました。

[リソースID]

ArrayList<Integer> resourceIds = new ArrayList<Integer>();
resourceIds.add(R.drawable.drawable0);
resourceIds.add(R.drawable.drawable1);
resourceIds.add(R.drawable.drawable2);
galleryAdapter.addImageResourceIds(resourceIds);
   
[ビットマップ]
   
ArrayList<Bitmap> bitmaps = new ArrayList<Bitmap>();
resourceIds.add(bitmap0);
resourceIds.add(bitmap1);
resourceIds.add(bitmap2);
galleryAdapter.addImageBitmaps(bitmaps);


また、リソースIDやビットマップをひとつずつ追加するメソッドが(動的にも)使えます。

galleryAdapter.addImageResourceId(R.drawable.new_drawable);
galleryAdapter.addImageResourceId(R.drawable.new_drawable, position);
galleryAdapter.addImageBitmap(bitmap);
galleryAdapter.addImageBitmap(bitmap, position);


上から、

リソースIDを使って画像を最後に追加
リソースIDを使って好きな位置に画像を追加
ビットマップを使って画像を最後に追加
ビットマップを使って好きな位置に画像を追加


となります。
あとは、これをGridView にセットすればOKです。

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


では、今回新しく追加したメソッドの紹介をします。


[新メソッド]


・removeAll()

一気にすべての画像をギャラリーから消します。


・replaceImageResourceId(int resourceId, int index)
・replaceImageBitmap(Bitmap bitmap, int index)

画像を入れ替えます。
上がリソースIDで下がビットマップ。indexが位置になります。


以上、「はじめからそうしとけよ(# ゚Д゚)」というお話でした。
ダウンロードはGitHubをアップデートしておきましたので以下からどうぞ。

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


では、お疲れ様です。
良い週末をおすごしください。^-^



3 件のコメント :

  1. はじめまして。過去の記事にコメント失礼します。

    今、Androidを勉強中で、フォトギャラリーをアプリに実装しようと奮闘しています。しかし、アウトオブメモリに悩まされ、やっと表示できたと思ったら表示が遅すぎて話にならず…。なんとかパスを読み込んだ順番に写真を表示できないものか?と四苦八苦した物のさっぱりわからず、2週間ほど詰まっているところにこの記事に出会いました。

    早速GitからGalleryAdapterを落させて頂いて突っ込んでみました。

    ActivityでBitmapを生成して、adapter.addImageBitmap(bitmap)を呼び出すようにしています。
    filepathはString[]で、0にはファイルパス、1には撮影日時が入っています。

    GalleryAdapter adapter = new GalleryAdapter(context);
    adapter.setProgressBarStyle(GalleryAdapter.PROGRESS_STYLE_MEDIUM);

    for(String[] filepath : pathList){
    Bitmap bitmap = null;
    BitmapFactory.Option options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(filepath[0],options);
    int scaleW = options.outWidth / 530 + 1;
    int scaleH = options.outHeight / 570 + 1;
    int scale = Math.max(scaleW, scaleH);
    options.inJustDecodeBondes = false;
    options.inSampleSize = scale;
    bitmap = BitmapFactory.decodeFile(date[0],options);
    adapter.addImageBitmap(bitmap);
    }
    GridView gridciew = (GridView)findViewById(R.id.gridView);
    gridview.setadapter(adapter);

    というような形で呼び出しています。

    この使い方では、アウトオブメモリになってしまいます。
    また、動画で公開されているような順番表示でかつプログレスバーが出る様な事もありません…。

    是非、解決方法を教えて頂けると嬉しいです。
    宜しくお願い致します。

    返信削除
  2. 失礼しました。
    アウトオブメモリは解決しました。
    また、表示後もかなり快適にスライドが出来ています。
    ありがとうございます!!

    しかし、上から順番に表示される、時間が少し相手全画像が一斉に表示される状態で、プログレスバーが出ないという問題があります。
    これは、setProgressBarStyleをする順番が悪いのでしょうか…?
    もし解決方法が分かりましたらお教え願いたいです。

    宜しくお願い致します。

    返信削除
  3. すいません、また是非このGalleryAdapterを使用させて頂きたいのですが、ライセンスは何を設定されていますか?
    Githubに記載がなかったので、ライセンス設定して頂けると嬉しいです。。

    返信削除