Glide框架

Android Glide4 异步图片框架

  • 简介篇: Glide框架

  • 迁移篇:Glide V4 框架新特性(Migrating from v3 to v4)

  • 基础篇:Android开发中使用Glide V4 中Generated API特性

  • 进级篇:Kotlin编程开发之Glide V4使用OkHttp3作为传输层
    image

介绍

Glide是一个面向Android快速和高效的开源媒体管理(open source media management )和图片加载(image loading )的框架,使用指定的接口很容易在一个案例中实现媒体解码(media decoding),内存(memory)和磁盘缓存(disk caching),资源池(resource pooling)的功能。

Glide支视三种类型的资源:视频,图片,动画GIF,对其进行获取,解码,显示操作。Glide拥有灵活的API,允许开发人员自定义添加网络堆栈(Network stack)。Glide默认使用HttpUrlConnection的网络堆栈,也可以使用Google的Volley库和Squareas的OkHttp库来替代。

Glide的主要重点是平滑和快速的滚动任何类型的图像列表。同时,Glide也高效的适用于这些情况,例如:获取,调整大小,显示远程图像。

配置Glide


  1. 在Gradle中引入:

      compile 'com.github.bumptech.glide:glide:4.0.0-RC0'
      annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC0'
  2. 若是使用Glide 以前版本,下载静态的jar包,点击版本下载。

  3. 在项目中proguard中混淆规则:

     -keep public class * implements com.bumptech.glide.module.GlideModule
     -keep public class * extends com.bumptech.glide.AppGlideModule
     -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
           **[] $VALUES;
           public *;
      }
    
    
    # for DexGuard only 
    
    -keepresourcexmlelements manifest/application/meta-data@value=GlideModule

    注意点:在最新V4版本中,若是AppGlideModule子类中isManifestParsingEnabled()返回false,则不需要AndroidManifest.xml中配置GlideModule。

    更多配置规则,请阅读 Configuration wiki 。

How do I Use Glide?


这里列举两个简单Glide V4使用案例。

  1. 单个ImageView使用Glide加载网络上的百度图片:

     public void onCreate(Bundle savedInstanceState) {
           ...
         ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
    
        Glide.with(this).load("https://www.baidu.com/img/bd_logo1.png").into(imageView);
    }   
    
  2. RecyclerView中ImageView使用Glide’s generated API,AppGlideModule的配置未贴出 :

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        MovieData movieData = list.get(position);
        holder.getTitle().setText(movieData.getTitle());
        imageLoader.loadImage(movieData.getImages(),holder.getNetworkImageView());
    
        //加载未获取图片之前的空白图片,发生异常的图片,图片资源
        GlideApp.with(context)
             .load(movieData.getImages())
             .placeholder(R.mipmap.ic_launcher)
             .error(R.mipmap.ic_launcher)
             .into(holder.getNetworkImageView());
    }

    更多详情,请阅读GitHub wiki 和 javadocs,以及。

Status(状态):


在3.0 分支上的Version 3是一个稳定的公开版本,用于Google的多个开源项目,包括 Android Camera app 和2014年的Google IO app。当前版本4 是在分支中开发。

Compatibility(兼容)


  • Android SDK :Glide最低要求API 10

  • OkHttp 2.x : 这里是有自行选择可用的依赖 okhttp- integration库 , 请阅读 Integration Libraries 页面.

  • OkHttp 3.x : 这里是有自行选择可用的依赖 okhttp3- integration库 , 请阅读 Integration Libraries 页面.

  • Volley : 这里是有自行选择可用的依赖 volley- integration库 , 请阅读 Integration Libraries 页面.

  • Round Pictures :

    CircleImageView/CircularImageView/RoundedImageView已经知道的问题,结合使用TransitionDrawable ( .crossFade() 和 .thumbnail() 或者 .placeholder() )和动画GiF,解决方式:使用在v4库下的BitmapTransformation( .circleCrop() )或者 .dontAnimate().

  • Huge Images(maps,comic strips) :

    Glide可以通过低级采用(downsampling)来加载大图片,但是不支持缩放和平滑 ImageView ,因为他们需要特殊资源优化(例如 平铺)来工作,才能避免OutOfMemoryErrors。

资源参考


  • Glide 项目: https://github.com/bumptech/glide

  • Glide wiki : https://github.com/bumptech/glide/wiki

  • 各种官方案例

    • Flickr案例:在Flick的公共API中,用户搜索关键字所匹配的图像,然后下载前几百次命中,并以几种不同的大小显示它们。

    • Gallery案例:加载手机本地存储的图像和视屏静止图像,在RecyclerView水平滚动的显示。

    • Giphy案例:使用Giphy`s的公开API来下载数据和流行的GIFs动画,且在垂直列表中显示他们。

    • SVG案例:通过Resources和网络加载SVG数据,且使用自定义的解码器(custom decoder)和drawble来显示SVG。

    • Google I/O案例:2014年Google I/O App使用Glide来实现各种场景下的使用。

你可能感兴趣的:(Android,热门的框架与第三方SDK,Glide,V4,图片加载库)