2013-05-29 50 views
0

我想制作一个网格视图来显示sdcard文件夹中照片的缩略图。 图像分辨率为3264x2448。我用Notras通用图像装载机LIB与配置:如何以缩略图大小加载图像(来自SD卡)更快?

DisplayImageOptions options = new DisplayImageOptions.Builder() 
      .showStubImage(R.drawable.stub) 
      .showImageForEmptyUri(R.drawable.stub) 
      .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) 
      .showImageOnFail(R.drawable.ic_launcher).cacheInMemory() 
      .cacheOnDisc().bitmapConfig(Bitmap.Config.RGB_565).build(); 

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
      context).defaultDisplayImageOptions(options).build(); 

而且getView()在我的自定义适配器:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    final ImageView imageView; 
    if (convertView == null) { 
     imageView = (ImageView) mInflater.inflate(R.layout.grid_item, 
       parent, false); 
    } else { 
     imageView = (ImageView) convertView; 
    } 

    mImageLoader.displayImage(mListData.get(position), imageView, options); 

    return imageView; 
} 

但它加载图像太慢。 所以请帮助我更快加载缩略图。我不想显示高质量的图像,我只想快速显示。

在此先感谢。

UIL版本:1.8.4 Android版本上测试:2.3.3

+0

使用一个viewholder进行平滑滚动和性能。 http://developer.android.com/training/improving-layouts/smooth-scrolling.html – Raghunandan

+0

@Raghunandan因为我的项目布局只包含一个ImageView,所以我没有使用ViewHolder,我认为这不会使图像加载速度变慢。 – VAdaihiep

+0

@VAdaihiep你可以请告诉我如何加载通用图像加载器的SD卡图像,我试过但错误显示像UIL默认不支持scheme(协议)[/mnt/sdcard/images/Adhisayam_2012/DSC_0122.jpg]。你应该自己实现这个支持(BaseImageDownloader.getStreamFromOtherSource(...))请帮助我.. – kalandar

回答

1

尝试在配置中使用.discCacheExtraOptions(800, 800, CompressFormat.PNG, 0)。您可以根据设备的最大尺寸更改值“800”。

+0

感谢您的支持,现在我的应用程序工作更快。 – VAdaihiep

+0

cacheInMemory()和cacheOnDisc()方法已被弃用..所以如何执行缓存? – r4jiv007

+0

您是否尝试阅读Java文档? – NOSTRA

1

你可以用它来获取缩略图:

Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail(
         getContentResolver(), selectedImageUri, 
         MediaStore.Images.Thumbnails.MINI_KIND, 
         (BitmapFactory.Options) null); 

有两种类型的缩略图: MINI_KIND: 512 x 384缩略图 MICRO_KIND:96 x 96缩略图

或者使用具有几乎相同参数的queryMiniThumbnail来获取缩略图的路径。

Cursor cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(
         getContentResolver(), selectedImageUri, 
         MediaStore.Images.Thumbnails.MINI_KIND, 
         null); 
if(cursor != null && cursor.getCount() > 0) { 
cursor.moveToFirst();//**EDIT** 
String uri = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Thumbnails.DATA)); 
} 

您可以使用此URI在ImageLoader的查看缩略图

Reference and detailed description

+0

谢谢,我只是尝试它,但selectedImageUri是一个字符串,但此方法需要一个长类型的ID。任何建议? – VAdaihiep

+0

* mImageLoader.displayImage(uri,imageView,options); * 这里uri是图像URI(即它可以是网址或“file:///mnt/sdcard/image.png”)。 – Mahesh

+0

哪种方法实际上需要长型ID?请解释 – Mahesh

相关问题