Upgrade to Pro — share decks privately, control downloads, hide ads and more …

やさしい画像ギャラリー改善tips

 やさしい画像ギャラリー改善tips

Yuichi Maekawa

April 20, 2017
Tweet

More Decks by Yuichi Maekawa

Other Decks in Programming

Transcript

  1. Storage Access Framework • MIME typeで指定できるが、関係のないフォルダの参照などもある • デザインの変更ができない • 公式ドキュメント

    https://developer.android.com/guide/topics/providers/document-provider.html //Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKA Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); //画像のみの場合 startActivityForResult(intent, YOUR_REQUEST_CODE);
  2. Storage Access Framework • MIME typeで指定できるが、関係のないフォルダの参照などもある • デザインの変更ができない • 公式ドキュメント

    https://developer.android.com/guide/topics/providers/document-provider.html //Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKA Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); //画像のみの場合 startActivityForResult(intent, YOUR_REQUEST_CODE); デザイナーが 許してくれない
  3. MediaStoreのイメージ図 Files - FileColumns - MEDIA_TYPE - MIME_TYPE - TITLE

    ... その他、有象無象 Audio - Media - Alubms - Artists ... Images - Media - Thumbnails - ImageColumns Video - Media(本体) - Thumbnails - VideoColumns
  4. 画像を取得 Files - FileColumns - MEDIA_TYPE - MIME_TYPE - TITLE

    ... その他、有象無象 Audio - Media - Alubms - Artists ... Images - Media - Thumbnails - ImageColumns Video - Media(本体) - Thumbnails - VideoColumns ここから取得 MediaStore.Images.Media
  5. 画像と動画を取得 Files - FileColumns - MEDIA_TYPE - MIME_TYPE - TITLE

    ... その他、有象無象 Audio - Media - Alubms - Artists ... Images - Media - Thumbnails - ImageColumns Video - Media(本体) - Thumbnails - VideoColumns ここから取得 =MediaStore.Filesで MEDIA_TYPE_IMAGE,MEDIA_TYPE_VIDEOを指定
  6. 画像へのアクセスの方法 ContentResolver r = context.getContentResolver(); Cursor c = r.query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, null,

    null, null, null); if (c != null) { c.moveToFirst(); while (!c.isAfterLast()) { String data = c.getString(c.getColumnIndex(MediaStore.Images.Thumbnails.DATA)); String imageId = c.getString(c.getColumnIndex(MediaStore.Images.Thumbnails.IMAGE_ID)); thumbnailPaths.add(data); thumbnailIds.add(imageId); c.moveToNext(); } c.close(); }
  7. 画像へのアクセスの方法 ContentResolver r = context.getContentResolver(); Cursor c = r.query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, null,

    null, null, null); if (c != null) { c.moveToFirst(); while (!c.isAfterLast()) { String data = c.getString(c.getColumnIndex(MediaStore.Images.Thumbnails.DATA)); String imageId = c.getString(c.getColumnIndex(MediaStore.Images.Thumbnails.IMAGE_ID)); thumbnailPaths.add(data); thumbnailIds.add(imageId); c.moveToNext(); } c.close(); }
  8. MediaStoreのイメージ図 Files - FileColumns - MEDIA_TYPE - MIME_TYPE - TITLE

    ... その他、有象無象 Audio - Media - Alubms - Artists ... Images - Media - Thumbnails - ImageColumns Video - Media(本体) - Thumbnails - VideoColumns
  9. MediaStoreのイメージ図 Files - FileColumns - MEDIA_TYPE - MIME_TYPE - TITLE

    ... その他、有象無象 Audio - Media - Alubms - Artists ... Images - Media - _ID - Thumbnails - IMAGE_ID - ImageColumns Video - Media(本体) - Thumbnails - VideoColumns 等しい
  10. ポイント3: 使い方に合わせて表示する • メッセージやSNSなど: 今撮ったsnowの写真がほしい → 撮影した写真が上に来るように → 選択したらすぐに送信できるように •

    画像加工など: プレビューしてから選ぶかもしれない → 拡大縮小できるプレビューを挟む → サムネイルじゃだめ(えっ