Я уже давно играю с миниатюрами андроида и вижу некоторые несоответствия, которые заставляют меня хотеть кричать. Моя цель - создать простой список всех изображений (и отдельный список для видео) с миниатюрой и именем файла.
Устройство: HTC Evo (свежий от Google I / O)
Сначала:
http://androidsamples.blogspot.com/2009/06/how-to-display-thumbnails-of-images.html
Этот код, похоже, не работает вообще, эскизы дублируются ... некоторые с эффектом "зеркала", а некоторые без. Также некоторые не загружаются и просто отображают черный квадрат. Я попытался восстановить миниатюры, удалив каталог "alblum thumbs" с SD-карты. Приложение HTC в галерее, кажется, показывает все отлично.
Этот подход, кажется, работает:
Bitmap thumb = MediaStore.Images.Thumbnails.getThumbnail(
getContentResolver(),
id, MediaStore.Video.Thumbnails.MICRO_KIND, null);
imageView.setImageBitmap(curThumb);
где id - это исходный идентификатор изображения, а imageView - это некоторое представление изображения. Это замечательно! Но, как ни странно, это слишком медленно для использования внутри SimpleViewBinder. Следующий подход:
String [] proj = {MediaStore.Images.Thumbnails._ID};
Cursor c = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
proj, MediaStore.Images.Thumbnails.IMAGE_ID + "=" +id ,
null, null);
if (c != null && c.moveToFirst()) {
Uri thumb = Uri.withAppendedPath(mThumbUri,c.getLong(0)+"");
imageView.setImageURI(thumb);
}
Я должен объяснить, что, по моему мнению, необходимо условие WHERE, потому что нет никаких гарантий, что у вашего URI будет одинаковый идентификатор для эскиза и его родительского изображения. Это работает для всех текущих изображений, но как только я начинаю добавлять изображения с камеры, они отображаются как пустые! Отладка показывает ужас:
SkImageDecoder::Factory returned null
ошибка и URI возвращается как недействительный. Это те же изображения, которые работают с предыдущим звонком. Кто-нибудь может поймать мой логический сбой или указать на какой-нибудь рабочий код?