广州最好的网站建设,湖北建设注册中心网站首页,使用微信做网站第三方登录,wordpress 脚本转 一、介绍 Android-Universal-Image-Loader是 一个开源的UI组件程序#xff0c;该项目的目的是提供一个可重复使用的仪器为异步图像加载#xff0c;缓存和显示。所以#xff0c;如果你的程序里需要这个功能的话#xff0c;那么不妨试试它。 因为已经封装好了一些类和方法… 转 一、介绍 Android-Universal-Image-Loader是 一个开源的UI组件程序该项目的目的是提供一个可重复使用的仪器为异步图像加载缓存和显示。所以如果你的程序里需要这个功能的话那么不妨试试它。 因为已经封装好了一些类和方法。我们 可以直接拿来用了。而不用重复去写了。其实写一个这方面的程序还是比较麻烦的要考虑多线程缓存内存溢出等很多方面。 二、具体使用 一个好的类库的重要特征就是可配置性强。我们先简单使用Android-Universal-Image-Loader一般情况下使用默认配置就可以了。 下面的实例利用Android-Universal-Image-Loader将网络图片加载到图片墙中。 1 public class BaseActivity extends Activity {2 ImageLoader imageLoader; 3 Override 4 protected void onCreate(Bundle savedInstanceState) { 5 // Create global configuration and initialize ImageLoader with this configuration 6 ImageLoaderConfiguration config new ImageLoaderConfiguration.Builder(getApplicationContext()) 7 .build(); 8 ImageLoader.getInstance().init(config); 9 super.onCreate(savedInstanceState); 10 } 11 } 1 public class MainActivity extends BaseActivity {2 3 Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 ImageLoader imageLoader ImageLoader.getInstance(); 9 10 GridView gridView (GridView) this.findViewById(R.id.grdvImageWall); 11 gridView.setAdapter(new PhotoWallAdapter(Constants.IMAGES)); 12 } 13 14 static class ViewHolder { 15 ImageView imageView; 16 ProgressBar progressBar; 17 } 18 19 public class PhotoWallAdapter extends BaseAdapter { 20 String[] imageUrls; 21 ImageLoader imageLoad; 22 DisplayImageOptions options; 23 LinearLayout gridViewItem; 24 25 public PhotoWallAdapter(String[] imageUrls) { 26 assert imageUrls ! null; 27 this.imageUrls imageUrls; 28 29 options new DisplayImageOptions.Builder() 30 .showImageOnLoading(R.drawable.ic_stub) // resource or 31 // drawable 32 .showImageForEmptyUri(R.drawable.ic_empty) // resource or 33 // drawable 34 .showImageOnFail(R.drawable.ic_error) // resource or 35 // drawable 36 .resetViewBeforeLoading(false) // default 37 .delayBeforeLoading(1000).cacheInMemory(false) // default 38 .cacheOnDisk(false) // default 39 .considerExifParams(false) // default 40 .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 41 .bitmapConfig(Bitmap.Config.ARGB_8888) // default 42 .displayer(new SimpleBitmapDisplayer()) // default 43 .handler(new Handler()) // default 44 .build(); 45 this.imageLoad ImageLoader.getInstance(); 46 47 } 48 49 Override 50 public int getCount() { 51 return this.imageUrls.length; 52 } 53 54 Override 55 public Object getItem(int position) { 56 if (position 0 || position this.imageUrls.length) { 57 throw new IllegalArgumentException( 58 position0||positionthis.imageUrls.length); 59 } 60 return this.imageUrls[position]; 61 } 62 63 Override 64 public long getItemId(int position) { 65 return position; 66 } 67 68 Override 69 public View getView(int position, View convertView, ViewGroup parent) { 70 // 判断这个image是否已经在缓存当中如果没有就下载 71 final ViewHolder holder; 72 if (convertView null) { 73 holder new ViewHolder(); 74 gridViewItem (LinearLayout) getLayoutInflater().inflate( 75 R.layout.image_wall_item, null); 76 holder.imageView (ImageView) gridViewItem 77 .findViewById(R.id.item_image); 78 holder.progressBar (ProgressBar) gridViewItem 79 .findViewById(R.id.item_process); 80 gridViewItem.setTag(holder); 81 convertView gridViewItem; 82 } else { 83 holder (ViewHolder) gridViewItem.getTag(); 84 } 85 this.imageLoad.displayImage(this.imageUrls[position], 86 holder.imageView, options, 87 new SimpleImageLoadingListener() { 88 89 Override 90 public void onLoadingStarted(String imageUri, View view) { 91 holder.progressBar.setProgress(0); 92 holder.progressBar.setVisibility(View.VISIBLE); 93 } 94 95 Override 96 public void onLoadingFailed(String imageUri, View view, 97 FailReason failReason) { 98 holder.progressBar.setVisibility(View.GONE); 99 } 100 101 Override 102 public void onLoadingComplete(String imageUri, 103 View view, Bitmap loadedImage) { 104 holder.progressBar.setVisibility(View.GONE); 105 } 106 107 }, new ImageLoadingProgressListener() { 108 109 Override 110 public void onProgressUpdate(String imageUri, 111 View view, int current, int total) { 112 holder.progressBar.setProgress(Math.round(100.0f 113 * current / total)); 114 } 115 }); // 通过URL判断图片是否已经下载 116 return convertView; 117 } 118 119 } 120 } 里面主要的对象都用 突出显示了。 三者的关系 ImageLoaderConfiguration是针对图片缓存的全局配置主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置。 ImageLoader是具体下载图片缓存图片显示图片的具体执行类它有两个具体的方法displayImage(...)、loadImage(...)但是其实最终他们的实现都是displayImage(...)。 DisplayImageOptions用于指导每一个Imageloader根据网络图片的状态空白、下载错误、正在下载显示对应的图片是否将缓存加载到磁盘上下载完后对图片进行怎么样的处理。 从三者的协作关系上看他们有点像厨房规定、厨师、客户个人口味之间的关系。ImageLoaderConfiguration就像是厨房里面的规定每一个厨师要怎么着装要怎么保持厨房的干净这是针对每一个厨师都适用的规定而且不允许个性化改变。ImageLoader就像是具体做菜的厨师负责具体菜谱的制作。DisplayImageOptions就像每个客户的偏好根据客户是重口味还是清淡每一个imageLoader根据DisplayImageOptions的要求具体执行。 ImageLoaderConfiguration 在上面的示例代码中我们使用ImageLoaderConfiguration的默认配置下面给出 ImageLoaderConfiguration比较详尽的配置从下面的配置中可以看出ImageLoaderConfiguration的配置主 要是全局性的配置主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置。 ImageLoaderConfiguration config new ImageLoaderConfiguration.Builder(context).memoryCacheExtraOptions(480, 800) // default device screen dimensions.diskCacheExtraOptions(480, 800, null) .taskExecutor(...) .taskExecutorForCachedImages(...) .threadPoolSize(3) // default .threadPriority(Thread.NORM_PRIORITY - 1) // default .tasksProcessingOrder(QueueProcessingType.FIFO) // default .denyCacheImageMultipleSizesInMemory() .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) .memoryCacheSize(2 * 1024 * 1024) .memoryCacheSizePercentage(13) // default .diskCache(new UnlimitedDiscCache(cacheDir)) // default .diskCacheSize(50 * 1024 * 1024) .diskCacheFileCount(100) .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default .imageDownloader(new BaseImageDownloader(context)) // default .imageDecoder(new BaseImageDecoder()) // default .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default .writeDebugLogs() .build(); ImageLoaderConfiguration的 主要职责就是记录相关的配置它的内部其实就是一些字段的集合如下面的源代码。它有一个builder的内部类这个类中的字段跟 ImageLoaderConfiguration中的字段完全一致它有一些默认值通过修改builder可以配置 ImageLoaderConfiguration。 View Code Display Options 每一个ImageLoader.displayImage(...)都可以使用Display Options。 DisplayImageOptions options new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_stub) // resource or drawable.showImageForEmptyUri(R.drawable.ic_empty) // resource or drawable .showImageOnFail(R.drawable.ic_error) // resource or drawable .resetViewBeforeLoading(false) // default .delayBeforeLoading(1000) .cacheInMemory(false) // default .cacheOnDisk(false) // default .preProcessor(...) .postProcessor(...) .extraForDownloader(...) .considerExifParams(false) // default .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default .bitmapConfig(Bitmap.Config.ARGB_8888) // default .decodingOptions(...) .displayer(new SimpleBitmapDisplayer()) // default .handler(new Handler()) // default .build(); Display Options的主要职责就是记录相关的配置它的内部其实就是一些字段的集合如下面的源代码。它有一个builder的内部类这个类中的字段跟DisplayOption中的字段完全一致它有一些默认值通过修改builder可以配置DisplayOptions。 View Code 参考链接 http://blog.csdn.net/wangjinyu501/article/details/8091623 https://github.com/nostra13/Android-Universal-Image-Loader http://www.intexsoft.com/blog/item/74-universal-image-loader-part-3.html 作者kissazi2 出处http://www.cnblogs.com/kissazi2/ 本文版权归作者所有欢迎转载但未经作者同意必须保留此段声明且在文章页面明显位置给出原文连接否则保留追究法律责任的权利。 转载于:https://www.cnblogs.com/1995hxt/p/4908145.html