在Android应用开发中,加载网络图片是一项常见的任务。在用户界面(UI)设计中,为了提供良好的用户体验,通常希望在图片下载过程中显示进度条,让用户了解操作的状态。LoadImageByProgress项目就是针对这一需求而设计的,它结合了Universal Image Loader (UIL)库和CircleProgress第三方库,实现了在下载图片时显示进度条的功能。

Universal Image Loader (UIL)是一个强大的Android图片加载、缓存库,支持多种加载策略和内存、硬盘缓存机制。它的主要功能包括:

  1. 异步加载图片,避免阻塞UI线程。

  2. 内存和SD卡的图片缓存,提高加载速度。

  3. 支持从各种来源加载图片,如网络、资源、文件系统等。

  4. 支持显示占位符图片和错误图片。

  5. 图片处理,如裁剪、缩放、旋转等。

CircleProgress库则是一个用于创建圆形进度条的Android组件,它可以自定义颜色、大小、进度值等属性,使得在下载过程中展示进度更加直观美观。

实现下载图片并显示进度条的基本步骤如下:

  1. 在项目中集成这两个库。通过在build.gradle文件中添加依赖,例如:

dependencies {

 implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'

}

  1. 在布局文件中,添加CircleProgress组件,并设置好相应的属性。

<com.github.mikephil.charting.charts.circularprogressview android:id='\"@+id/progress_view\"' android:layout_height='\"wrap_content\"' android:layout_width='\"wrap_content\"' app:circle_background_color='\"#AAA\"' app:circle_progress_color='\"#FF0000\"' app:circle_stroke_width='\"5dp\"'></com.github.mikephil.charting.charts.circularprogressview>

  1. 使用Universal Image Loader配置加载器。在初始化阶段,调用ImageLoaderConfiguration来配置缓存策略、线程池等参数。

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)

 .threadPoolSize(3)

 .threadPriority(Thread.NORM_PRIORITY - 2)

 .denyCacheImageMultipleSizesInMemory()

 .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())

 .imageDownloader(new BaseImageDownloader(context))

 .defaultDisplayImageOptions(DisplayImageOptions.createSimple())

 .writeDebugLogs() // Remove for release app

 .build();

ImageLoader.getInstance().init(config);

  1. 创建一个自定义的ImageViewProgressBar,在下载图片时同时更新进度条。使用DisplayImageOptions设置加载监听器,监听图片的加载进度。

DisplayImageOptions options = new DisplayImageOptions.Builder()

 .showImageForEmptyUri(R.drawable.placeholder)

 .showImageOnFail(R.drawable.error)

 .cacheInMemory(true)

 .cacheOnDisk(true)

 .considerExifParams(true)

 .bitmapConfig(Bitmap.Config.RGB_565)

 .build();



ImageLoader.getInstance().displayImage(imageUrl, imageView, options, new ImageLoadingListener() {

 @Override

 public void onLoadingStarted(String imageUri, View view) {

 //显示进度条

 progressBar.setVisibility(View.VISIBLE);

 }

 @Override

 public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

 //图片加载失败,隐藏进度条

 progressBar.setVisibility(View.GONE);

 }

 @Override

 public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

 //图片加载成功,隐藏进度条

 progressBar.setVisibility(View.GONE);

 }

 @Override

 public void onLoadingCancelled(String imageUri, View view) {

 //图片加载取消,隐藏进度条

 progressBar.setVisibility(View.GONE);

 }

}, new ImageLoadingProgressListener() {

 @Override

 public void onProgressUpdate(String imageUri, View view, int current, int total) {

 //更新进度条

 progressBar.setProgress(current * 100 / total);

 }

});

在这个过程中,onLoadingProgress方法会在图片下载时被调用,每次调用都会更新进度条的值,从而在用户界面中实时展示图片下载进度。