【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )(三)

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )(三)

2. GridView中使用 UIL









GridView 中使用 UIL :


-- 核心代码 : 主要是在 GridView 中的适配器中使用 UIL;


-- 设置展示选项 :


private DisplayImageOptions options;
  options = new DisplayImageOptions.Builder()
      .showImageOnLoading(R.drawable.ic_stub)  //设置加载时显示的图片
      .showImageForEmptyUri(R.drawable.ic_empty)  //设置 Uri 为 空时显示的图片
      .showImageOnFail(R.drawable.ic_error)  //设置加载失败显示的图片
      .cacheInMemory(true)      //设置内存缓存
      .cacheOnDisk(true)        //设置磁盘缓存
      .considerExifParams(true)     //考虑相机参数
      .bitmapConfig(Bitmap.Config.RGB_565)  //设置解码参数
      .build();



-- 设置加载 处理 监听器 : 在加载图片时 可以设置加载监听器;


//加载 并 显示图片, 设置加载监听器 监听 开始加载 加载失败 加载完成 事件
    ImageLoader.getInstance()
      .displayImage(IMAGE_URLS[position], holder.imageView, options, new SimpleImageLoadingListener() {
      @Override
      public void onLoadingStarted(String imageUri, View view) {
        holder.progressBar.setProgress(0);
        holder.progressBar.setVisibility(View.VISIBLE);
      }
      @Override
      public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
        holder.progressBar.setVisibility(View.GONE);
      }
      @Override
      public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        holder.progressBar.setVisibility(View.GONE);
      }
      }, new ImageLoadingProgressListener() {
      @Override
      public void onProgressUpdate(String imageUri, View view, int current, int total) {
        holder.progressBar.setProgress(Math.round(100.0f * current / total));
      }
      });



-- 完整的 GridView 适配器代码 :


private static class ImageAdapter extends BaseAdapter {
  private static final String[] IMAGE_URLS = Constants.IMAGES_CN;
  private LayoutInflater inflater;
  private DisplayImageOptions options;
  ImageAdapter(Context context) {
    inflater = LayoutInflater.from(context);
    options = new DisplayImageOptions.Builder()
      .showImageOnLoading(R.drawable.ic_stub)  //设置加载时显示的图片
      .showImageForEmptyUri(R.drawable.ic_empty)  //设置 Uri 为 空时显示的图片
      .showImageOnFail(R.drawable.ic_error)  //设置加载失败显示的图片
      .cacheInMemory(true)      //设置内存缓存
      .cacheOnDisk(true)        //设置磁盘缓存
      .considerExifParams(true)     //考虑相机参数
      .bitmapConfig(Bitmap.Config.RGB_565)  //设置解码参数
      .build();
  }
  @Override
  public int getCount() {
    return IMAGE_URLS.length;
  }
  @Override
  public Object getItem(int position) {
    return null;
  }
  @Override
  public long getItemId(int position) {
    return position;
  }
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    View view = convertView;
    if (view == null) {
    view = inflater.inflate(R.layout.item_grid_image, parent, false);
    holder = new ViewHolder();
    assert view != null;
    holder.imageView = (ImageView) view.findViewById(R.id.image);
    holder.progressBar = (ProgressBar) view.findViewById(R.id.progress);
    view.setTag(holder);
    } else {
    holder = (ViewHolder) view.getTag();
    }
    //加载 并 显示图片, 设置加载监听器 监听 开始加载 加载失败 加载完成 事件
    ImageLoader.getInstance()
      .displayImage(IMAGE_URLS[position], holder.imageView, options, new SimpleImageLoadingListener() {
      @Override
      public void onLoadingStarted(String imageUri, View view) {
        holder.progressBar.setProgress(0);
        holder.progressBar.setVisibility(View.VISIBLE);
      }
      @Override
      public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
        holder.progressBar.setVisibility(View.GONE);
      }
      @Override
      public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        holder.progressBar.setVisibility(View.GONE);
      }
      }, new ImageLoadingProgressListener() {
      @Override
      public void onProgressUpdate(String imageUri, View view, int current, int total) {
        holder.progressBar.setProgress(Math.round(100.0f * current / total));
      }
      });
    return view;
  }
  static class ViewHolder {
    ImageView imageView;
    ProgressBar progressBar;
  }
  }







-- 显示效果 :


 image.png


目录
相关文章
|
2月前
|
IDE Android开发 iOS开发
深入解析Android与iOS的系统架构及开发环境差异
本文旨在探讨Android和iOS两大主流移动操作系统在系统架构、开发环境和用户体验方面的显著差异。通过对比分析,我们将揭示这两种系统在设计理念、技术实现以及市场策略上的不同路径,帮助开发者更好地理解其特点,从而做出更合适的开发决策。
140 2
|
8天前
|
监控 Cloud Native 持续交付
云原生技术深度解析:重塑现代应用开发与部署范式####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在现代软件开发中的重要性。通过剖析容器化、微服务架构、持续集成/持续部署(CI/CD)等关键技术,本文旨在揭示云原生技术如何促进应用的敏捷性、可扩展性和高可用性,进而推动企业数字化转型进程。不同于传统摘要仅概述内容要点,本部分将融入具体案例分析,直观展示云原生技术在实际应用中的显著成效与挑战应对策略,为读者提供更加丰富、立体的理解视角。 ####
|
25天前
|
消息中间件 中间件 数据库
NServiceBus:打造企业级服务总线的利器——深度解析这一面向消息中间件如何革新分布式应用开发与提升系统可靠性
【10月更文挑战第9天】NServiceBus 是一个面向消息的中间件,专为构建分布式应用程序设计,特别适用于企业级服务总线(ESB)。它通过消息队列实现服务间的解耦,提高系统的可扩展性和容错性。在 .NET 生态中,NServiceBus 提供了强大的功能,支持多种传输方式如 RabbitMQ 和 Azure Service Bus。通过异步消息传递模式,各组件可以独立运作,即使某部分出现故障也不会影响整体系统。 示例代码展示了如何使用 NServiceBus 发送和接收消息,简化了系统的设计和维护。
41 3
|
30天前
|
开发工具 Android开发 iOS开发
深入解析安卓与iOS开发环境的优劣
【10月更文挑战第4天】 本文将深入探讨安卓和iOS两大主流移动操作系统的开发环境,从技术架构、开发工具、用户体验等方面进行详细比较。通过分析各自的优势和不足,帮助开发者更好地理解这两个平台的异同,从而为项目选择最合适的开发平台提供参考。
21 3
|
9天前
|
安全 5G Android开发
安卓与iOS的较量:技术深度解析
【10月更文挑战第24天】 在移动操作系统领域,安卓和iOS无疑是两大巨头。本文将深入探讨这两个系统的技术特点、优势和不足,以及它们在未来可能的发展方向。我们将通过对比分析,帮助读者更好地理解这两个系统的本质和内涵,从而引发对移动操作系统未来发展的深思。
19 0
|
1月前
|
安全 Android开发 iOS开发
深入解析:安卓与iOS的系统架构及其对应用开发的影响
本文旨在探讨安卓与iOS两大主流操作系统的架构差异,并分析这些差异如何影响应用开发的策略和实践。通过对比两者的设计哲学、安全机制、开发环境及性能优化等方面,本文揭示了各自的特点和优势,为开发者在选择平台和制定开发计划时提供参考依据。
49 4
|
1月前
|
测试技术 数据库 Android开发
深入解析Android架构组件——Jetpack的使用与实践
本文旨在探讨谷歌推出的Android架构组件——Jetpack,在现代Android开发中的应用。Jetpack作为一系列库和工具的集合,旨在帮助开发者更轻松地编写出健壮、可维护且性能优异的应用。通过详细解析各个组件如Lifecycle、ViewModel、LiveData等,我们将了解其原理和使用场景,并结合实例展示如何在实际项目中应用这些组件,提升开发效率和应用质量。
39 6
|
2月前
|
存储 开发框架 数据可视化
深入解析Android应用开发中的四大核心组件
本文将探讨Android开发中的四大核心组件——Activity、Service、BroadcastReceiver和ContentProvider。我们将深入了解每个组件的定义、作用、使用方法及它们之间的交互方式,以帮助开发者更好地理解和应用这些组件,提升Android应用开发的能力和效率。
154 5
|
2月前
|
缓存 Android开发 开发者
Android RecycleView 深度解析与面试题梳理
本文详细介绍了Android开发中高效且功能强大的`RecyclerView`,包括其架构概览、工作流程及滑动优化机制,并解析了常见的面试题。通过理解`RecyclerView`的核心组件及其优化技巧,帮助开发者提升应用性能并应对技术面试。
73 8
|
2月前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
65 8

推荐镜像

更多