1. 首页
  2. 考试认证
  3. 其它
  4. LoadImageByProgress在Android中实现图片下载进度条显示

LoadImageByProgress在Android中实现图片下载进度条显示

上传者: 2024-12-09 14:08:59上传 ZIP文件 369.35KB 热度 8次

在Android应用开发中,加载网络图片是一项常见的任务。为了提供更好的用户体验,我们通常希望在图片下载过程中显示进度条,让用户实时了解操作的状态。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. 创建一个自定义的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);

    }

});

下载地址
用户评论