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

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

5. 使用步骤




(1) 引入库的三种方式



引入 Universal-Image_Loader 库 : 使用以下每种方法都可以;


-- 1. 直接导入 JAR 包 : 下载地址 点击打开链接, 将 jar 包导入到 Android 工程中;


-- 2. Maven 依赖 :


<dependency>
    <groupId>com.nostra13.universalimageloader</groupId>
    <artifactId>universal-image-loader</artifactId>
    <version>1.9.5</version>
</dependency>


-- 3. Gradle 依赖 :

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





(2) 添加网络存储权限


Manifest 配置 : 使用本 JAR 包需要添加 网络 和 内存 读写权限;


<manifest>
    <!-- Include following permission if you load images from Internet -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- Include following permission if you want to cache images on SD card -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    ...
</manifest>






(3) 首次初始化 ImageLoader


初始化 : 首次使用 Universal-Image-Loader 之前需要初始化, 初始化必须在一个 Context 中进行初始化;


-- 初始化方法 : 创建一个 ImageLoaderConfiguration, 并且使用 ImageLoader.getInstance().init() 方法进行初始化;


public class MyActivity extends Activity {
    @Override
    public void onCreate() {
        super.onCreate();
        // Create global configuration and initialize ImageLoader with this config
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
            ...
            .build();
        ImageLoader.getInstance().init(config);
        ...
    }
}


(4) 配置 ImageLoader


ImageLoader 配置简介 :


-- 配置全局性 (配置作用范围) : ImageLoader 的 配置 (ImageLoaderConfiguration) 在应用全局中有效, 你只需要设置它一次.


-- 配置可选性 : 配置中所有的选项都是可选的;


-- 默认配置 : 可以查看 ImageLoaderConfiguration.java 类, 其中的默认值即默认配置;


/** {@value} */
  public static final int DEFAULT_THREAD_POOL_SIZE = 3;
  /** {@value} */
  public static final int DEFAULT_THREAD_PRIORITY = Thread.NORM_PRIORITY - 2;
  /** {@value} */
  public static final QueueProcessingType DEFAULT_TASK_PROCESSING_TYPE = QueueProcessingType.FIFO;
  private Context context;
  private int maxImageWidthForMemoryCache = 0;
  private int maxImageHeightForMemoryCache = 0;
  private int maxImageWidthForDiskCache = 0;
  private int maxImageHeightForDiskCache = 0;
  private BitmapProcessor processorForDiskCache = null;
  private Executor taskExecutor = null;
  private Executor taskExecutorForCachedImages = null;
  private boolean customExecutor = false;
  private boolean customExecutorForCachedImages = false;
  private int threadPoolSize = DEFAULT_THREAD_POOL_SIZE;
  private int threadPriority = DEFAULT_THREAD_PRIORITY;
  private boolean denyCacheImageMultipleSizesInMemory = false;
  private QueueProcessingType tasksProcessingType = DEFAULT_TASK_PROCESSING_TYPE;
  private int memoryCacheSize = 0;
  private long diskCacheSize = 0;
  private int diskCacheFileCount = 0;
  private MemoryCache memoryCache = null;
  private DiskCache diskCache = null;
  private FileNameGenerator diskCacheFileNameGenerator = null;
  private ImageDownloader downloader = null;
  private ImageDecoder decoder;
  private DisplayImageOptions defaultDisplayImageOptions = null;
  private boolean writeLogs = false;



-- 配置示例 : 所有配置的示例.

// DON'T COPY THIS CODE TO YOUR PROJECT! This is just example of ALL options using.
// See the sample project how to use ImageLoader correctly.
File cacheDir = StorageUtils.getCacheDirectory(context);
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 - 2) // default
        .tasksProcessingOrder(QueueProcessingType.FIFO) // default
        .denyCacheImageMultipleSizesInMemory()
        .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
        .memoryCacheSize(2 * 1024 * 1024)
        .memoryCacheSizePercentage(13) // default
        .diskCache(new UnlimitedDiskCache(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();

(5) 展示选项


展示选项简介 :


-- 作用范围 : 展示选项 (DisplayImageOptions) 只对每个展示任务 (Display Task) 有效 (ImageLoader.displayImage(...));


-- 展示任务 : 展示选项 (Display Options) 可以被应用于每个展示任务 (ImageLoader.displayImage(...) call);


-- 默认展示选项使用条件 : 如果展示选项没有通过 ImageLoader.displayImage(...) 方法设置, 那么就会使用默认的展示选项;


-- 默认展示选项来源 : 展示选项是 配置类 调用 ddefaultDisplayImageOptions() 方法获取,  如ImageLoaderConfiguration.defaultDisplayImageOptions(...) ;


-- 展示选项示例 :


// DON'T COPY THIS CODE TO YOUR PROJECT! This is just example of ALL options using.
// See the sample project how to use ImageLoader correctly.
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();













二. Universal-Image-Loader 示例代码







示例代码地址 : https://github.com/han1202012/Android-Quick-Develop/tree/master/app_sample_universal-image-loader








1. ListView 中使用 UIL




ListView 中使用 UIL :


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


-- 设置展示选项 :


  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)     //考虑相机参数

    .displayer(new CircleBitmapDisplayer(Color.WHITE, 5))//设置加载器, 将图片切成圆形展示出来

    .build();



-- 调用核心方法展示图片 :


ImageLoader.getInstance().displayImage(IMAGE_URLS[position], holder.image, options, animateFirstListener);


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



private static class ImageAdapter extends BaseAdapter {
  private static final String[] IMAGE_URLS = Constants.IMAGES_CN;
  private LayoutInflater inflater;
  private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener();
  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)     //考虑相机参数
      .displayer(new CircleBitmapDisplayer(Color.WHITE, 5))//设置加载器, 将图片切成圆形展示出来
      .build();
  }
  @Override
  public int getCount() {
    return IMAGE_URLS.length;
  }
  @Override
  public Object getItem(int position) {
    return position;
  }
  @Override
  public long getItemId(int position) {
    return position;
  }
  @Override
  public View getView(final int position, View convertView, ViewGroup parent) {
    View view = convertView;
    final ViewHolder holder;
    if (convertView == null) {
    view = inflater.inflate(R.layout.item_list_image, parent, false);
    holder = new ViewHolder();
    holder.text = (TextView) view.findViewById(R.id.text);
    holder.image = (ImageView) view.findViewById(R.id.image);
    view.setTag(holder);
    } else {
    holder = (ViewHolder) view.getTag();
    }
    holder.text.setText("Item " + (position + 1));
    //加载 并 显示图片
    ImageLoader.getInstance().displayImage(IMAGE_URLS[position], holder.image, options, animateFirstListener);
    return view;
  }
  static class ViewHolder {
    TextView text;
    ImageView image;
  }
  }




-- 效果图 :


image.png






目录
相关文章
|
Java 开发工具 Android开发
Android与iOS开发环境搭建全解析####
本文深入探讨了Android与iOS两大移动操作系统的开发环境搭建流程,旨在为初学者及有一定基础的开发者提供详尽指南。我们将从开发工具的选择、环境配置到第一个简单应用的创建,一步步引导读者步入移动应用开发的殿堂。无论你是Android Studio的新手还是Xcode的探索者,本文都将为你扫清开发道路上的障碍,助你快速上手并享受跨平台移动开发的乐趣。 ####
|
IDE Android开发 iOS开发
深入解析Android与iOS的系统架构及开发环境差异
本文旨在探讨Android和iOS两大主流移动操作系统在系统架构、开发环境和用户体验方面的显著差异。通过对比分析,我们将揭示这两种系统在设计理念、技术实现以及市场策略上的不同路径,帮助开发者更好地理解其特点,从而做出更合适的开发决策。
2099 2
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
476 15
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
域名解析 网络协议 安全
DNS查询工具简介
DNS查询工具简介
9440 4
|
测试技术 数据库 Android开发
深入解析Android架构组件——Jetpack的使用与实践
本文旨在探讨谷歌推出的Android架构组件——Jetpack,在现代Android开发中的应用。Jetpack作为一系列库和工具的集合,旨在帮助开发者更轻松地编写出健壮、可维护且性能优异的应用。通过详细解析各个组件如Lifecycle、ViewModel、LiveData等,我们将了解其原理和使用场景,并结合实例展示如何在实际项目中应用这些组件,提升开发效率和应用质量。
496 6
|
域名解析 网络协议 安全
DNS查询工具简介
DNS查询工具简介
1378 4
|
安全 Java Linux
深入解析Android系统架构及其对开发者的意义####
【10月更文挑战第21天】 本文旨在为读者揭开Android操作系统架构的神秘面纱,探讨其如何塑造现代移动应用开发格局。通过剖析Linux内核、硬件抽象层、运行时环境及应用程序框架等关键组件,揭示Android平台的强大功能与灵活性。文章强调了理解Android架构对于开发者优化应用性能、提升用户体验的重要性,并展望了未来技术趋势下Android的发展方向。 ####
531 0
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
2368 0

热门文章

最新文章

推荐镜像

更多
  • DNS