美文网首页android技术杂荟androidAndroid实践
Android实践 -- Android开源框架Glide的使用

Android实践 -- Android开源框架Glide的使用

作者: CoderMiner | 来源:发表于2016-10-28 11:44 被阅读7627次

    Android开源框架Glide的使用

    来自 www.gratisography.com
    Glide是一个快速高效的多媒体管理和图像加载的框架,封装了Android平台的多媒体的解码,内存和硬盘缓存等,Glide
    支持解码、显示视频、图像和GIFs,Glide是基于定制的HttpUrlConnection,下载使用
    • jar
      可以在Github下载最新的jar包 下载地址
    • Gradle
    repositories {
    mavenCentral() // jcenter() works as well because it pulls from Maven Central
    }
    
    dependencies {
      compile 'com.github.bumptech.glide:glide:3.7.0'
      compile 'com.android.support:support-v4:19.1.0'
    }
    
    • Maven
    <dependency>
    <groupId>com.github.bumptech.glide</groupId>
    <artifactId>glide</artifactId>
    <version>3.7.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.android</groupId>
      <artifactId>support-v4</artifactId>
      <version>r7</version>
    </dependency>
    
    * 混淆
    
    -keep public class * implements com.bumptech.glide.module.GlideModule
    -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
      **[] $VALUES;
      public *;
    }
    -keepresourcexmlelements manifest/application/meta-data@value=GlideModule
    

    加载图片

    最基本的使用

    image = (ImageView)findViewById(R.id.image);
    Glide.with(this)
          .load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
          .into(image);
    

    with(Context context):Context支持 Activity Context Fragment FragmentActivity中四种类型
    load():支持远程图片,本地图片文件,图片资源,多媒体数据库的uri
    into():在哪个imageview中显示

    • 加载资源图片
      Glide.with(this).load(R.drawable.ic_launcher).into(image);
      
    • 加载文件图片
      File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/DCIM/Camera/IMG_20151025_120635_HDR.jpg");
      Glide.with(this).load(f).into(image);
      //or uri
      Glide.with(this).load(Uri.fromFile(f)).into(image);
      
    • 加载网络图片,需要设置网路权限,并联网
      Glide.with(this)
          .load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
          .into(image);
      

    设置占位图和动画

    在图片过大或者网上太慢时,可以设置为图像设置一个占位图,在图像加载出来之前先显示占位图设置占位图的方式
    还可以设置在图像加载失败时显示的图像

    Glide.with(this).load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
          .placeholder(R.drawable.ic_launcher) //设置占位图,在加载之前显示
          .error(R.drawable.icon) //在图像加载失败时显示
          .into(image);
    

    在加载图像时,还可以设置图像显示的动画

    Glide.with(this).load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
          .placeholder(R.drawable.ic_launcher)
          .error(R.drawable.icon)
          .crossFade() //设置显示动画,
          .into(image);
    

    crossFade()有几种重载的方法
    crossFade(int duration):设置时间
    crossFade(Animation animation, int duration):设置自定义的动画和时间
    crossFade(int animationId, int duration): 加载动画资源和时间

    图像剪裁和缩放

    Glide提供了override(horizontalSize, verticalSize)方法来裁剪图像为设置的大小,图像在裁剪之后
    图像可能会变形,Glide还提供了两种方法 centerCrop()fitCenter使图像等比例的缩放和显示,可以试一下
    这个两个方法的显示的不同

    Glide.with(this)
          .load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
          .override(200, 240)
          .centerCrop()
          .into(image);
    
    Glide.with(this)
          .load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
          .override(200, 240)
          .fitCenter()
          .into(image);
    

    显示Gif和视频

    Glide中支持显示GIFs和视频,视频的加载和图像的加载基本一致,显示GIFs只需调用方法asGif()

    Glide  
      .with( context )
      .load( gifUrl )
      .asGif()
      .error( R.drawable.full_cake )
      .into( imageViewGif );
    

    也可以只显示GIFs的静态图像

    Glide  
      .with( context )
      .load( gifUrl )
      .asBitmap()
      .into( imageViewGifAsBitmap );
    

    缓存

    我们都知道图像的处理和显示在Android中是最耗费内存的,很容易引起OOM的问题,一般在图像处理和显示时,
    都会使用缓存策略,内存缓存或硬盘缓存,在Glide中也提供了不同的缓存策略,默认的情况下会将显示的图像
    进行内存缓存,也可以设置不使用内存缓存,调用方法skipMemoryCache(true),就告诉Glide我们不打算使用
    内存缓存,默认是使用内存缓存的

    Glide.with(this)
          .load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
          .skipMemoryCache(true)
          .into(image);
    

    Glide同时也提供了硬盘缓存,硬盘缓存的策略可以通过方法diskCacheStrategy()来设定

    Glide.with(this)
          .load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
          .diskCacheStrategy(DiskCacheStrategy.NONE) //不使用硬盘缓存
          .into(image);
    

    硬盘缓存策略
    DiskCacheStrategy.NONE: 不使用硬盘缓存
    DiskCacheStrategy.SOURCE: 将原始图像缓存在硬盘中
    DiskCacheStrategy.RESULT: 将显示出来大小的图像缓存在硬盘(默认缓存策略)
    DiskCacheStrategy.ALL: 显示的图像和原始图像都会缓存

    请求优先级

    Glide中可以设置图像加载的优先级,这个优先级的策略并不是严格执行的,只是一个指导策略,从低到高的
    优先级,可以为不同的图像设置不同的优先级,看一下加载的效果

    Priority.LOW
    Priority.NORMAL
    Priority.HIGH
    Priority.IMMEDIATE
    
    Glide.with(this)
          .load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
          .priority(Priority.HIGH)
          .into(image);
    

    自定义转换和动画

    Glide提供了方法可以使开发者自定义转换(圆角图像、图像模糊等)和动画
    后续会有demo实例,To be continue....

    相关文章

      网友评论

      本文标题:Android实践 -- Android开源框架Glide的使用

      本文链接:https://www.haomeiwen.com/subject/jaxeuttx.html