我正在尝试创建一个图片浏览器,但是当有太多图片需要加载时我会出错
这是我的代码(位图在第100行使用): http://pastebin.com/NidnH57b
如果尝试访问包含大量图像的目录,则会出错。
是否有加载大量图片的解决方案?
由于
答案 0 :(得分:1)
我认为在活动开始时加载所需的所有图像并不是一个好习惯。例如,列表视图仅加载将在适配器中显示的图像。 Yo应该在arraylist中获取所需的所有信息并使用arrayAdapter作为示例,它将销毁并重新创建所需的视图以节省内存。
可以找到一种简单的方法here
答案 1 :(得分:0)
使用MediaStore
来获取通过文件迭代的所有设备图像非常慢。你可以这样得到它们:
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA,
MediaStore.Images.Media.BUCKET_ID };
String selection = MediaStore.Images.Media.BUCKET_ID + " = " + mAlbumId; //to get from specified folder
Cursor cursor = getContentResolver().query(uri, projection, selection, null, null);
while (cursor.moveToNext()) {
Picture picture = new Picture();
int columnIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
picture.path = cursor.getString(columnIndex);
columnIndex = cursor.getColumnIndex(MediaStore.Images.Media._ID);
picture.id = cursor.getLong(columnIndex);
columnIndex = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_ID);
picture.bucketId = cursor.getString(columnIndex);
mAvailableImages.add(picture);
}
cursor.close();
然后使用自定义适配器在ListView中使用检索到的数据并编写您自己的ImageManager,它将为您创建和管理位图。
另请参阅Android原生图库http://viralpatel.net/blogs/pick-image-from-galary-android-app/
答案 2 :(得分:0)
访问目录时,不应预加载所有图像。相反,您应该在适配器的getView
中加载图像(异步)。此外,您可能希望根据分辨率缩小图像,而不是使用inSampleSize
的固定值。该网站可能会对您有所帮助:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
顺便说一下。你还应该看一下ViewHolder
- 模式(例如这里http://www.jmanzano.es/blog/?p=166)。