在Android应用开发中,加载网络图片是一项常见的任务。在用户界面(UI)设计中,为了提供良好的用户体验,通常希望在图片下载过程中显示进度条,让用户了解操作的状态。LoadImageByProgress项目就是针对这一需求而设计的,它结合了Universal Image Loader (UIL)库和CircleProgress第三方库,实现了在下载图片时显示进度条的功能。
Universal Image Loader (UIL)是一个强大的Android图片加载、缓存库,支持多种加载策略和内存、硬盘缓存机制。它的主要功能包括:
-
异步加载图片,避免阻塞UI线程。
-
内存和SD卡的图片缓存,提高加载速度。
-
支持从各种来源加载图片,如网络、资源、文件系统等。
-
支持显示占位符图片和错误图片。
-
图片处理,如裁剪、缩放、旋转等。
CircleProgress库则是一个用于创建圆形进度条的Android组件,它可以自定义颜色、大小、进度值等属性,使得在下载过程中展示进度更加直观美观。
实现下载图片并显示进度条的基本步骤如下:
- 在项目中集成这两个库。通过在
build.gradle
文件中添加依赖,例如:
dependencies {
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
- 在布局文件中,添加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>
- 使用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);
- 创建一个自定义的ImageView或ProgressBar,在下载图片时同时更新进度条。使用
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
方法会在图片下载时被调用,每次调用都会更新进度条的值,从而在用户界面中实时展示图片下载进度。
暂无评论