Glide图片加载框架学习

学习资源来自博客园,请点击

Glide(图片加载框架)

Glide默认加载图片的清晰度,即bitmap的格式为RGB_565

添加依赖

compile 'com.github.bumptech.glide:glide:3.5.2'//由于glide需要依赖V4包
compile 'com.android.support:support-v4:24.2.1'

最简单加载并设置在imageView上

Glide.with(this)
.load("http://imgstore.cdn.sogou.com/app/a/100540002/527471.jpg")
.into(((ImageView)findViewById(R.id.image)));

针对对清晰度有更高的要求的

可以通过自定义GlideModel

实现gilde的GlideModule接口

package com.tc.glideimageloader.glide;
import android.content.Context;
import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.load.DecodeFormat;
import com.bumptech.glide.module.GlideModule;
    /**
    * Created by 辉神 on 2016/10/5.
    */
    public class GlideConfiguration implements GlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
    // Apply options to the builder here.
    builder.setDecodeFormat(DecodeFormat.***PREFER\_ARGB\_8888***);
    }
    @Override
    public void registerComponents(Context context, Glide glide) {
    // register ModelLoaders here.
    }
}

AndroidManifest.xml

<meta-data 
android:name="com.tc.glideimageloader.glide.GlideConfiguration"
android:value="GlideModule"/>

缓存策略

glide缓存所有尺寸的图片

glide图片加载原理:只加载固定尺寸,并在磁盘中缓存好。如:原为200*200,如果imageView为100*100,则加载时,glide会加载100*100的尺寸大小 到磁盘中,下次自动判断内存否已经加载了这个图片

但是如果,第一个页面的imageview只有100*100,当点击到第二个面的时候imageview是200*200了,第二页面又要重新加载一次

可以使用下面的方法,缓存全尺寸的图片,又缓存其他尺寸的图片:

Glide.with(this)
.load("http://imgstore.cdn.sogou.com/app/a/100540002/527471.jpg")
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(((ImageView)findViewById(R.id.image)));

DiskCaceStrategy的四个常量解说

all:缓存源资源和转换后的资源---缓存原尺寸图片和其他小尺寸的图片

none:不作任何磁盘缓存

source:缓存源资源----这个应该意思是只缓存源资源,可能是原尺寸图片

result:缓存转换后的资源-----缓存固定尺寸,也有可能与原尺寸有很大差异

priority(Priority.NORMAL)下载优先级

Glide.with(this).load(imageUrl).priority(Priority.NORMAL).into(imageView);

override(200,200)按尺寸缓存图片

centerCrop()和fitCenter()选择放置类型,

centerCrop()centerCrop在ImageView属性就有这个,用途就是,按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)

fitCenter()fitCenter在IMageview也有属性,其实也一样用途,把图片按比例扩大/缩小到View的宽度,居中显示

transform()设置转换器,例:设置图片圆角

设置需要加载的内容

项目中有很多需要先下载图片然后再做一些合成的功能,比如项目中出现的图文混排,该如何实现目标下

Glide.with(this).load(imageUrl).centerCrop().into(

new SimpleTarget<GlideDrawable>() {

@Override

public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {

imageView.setImageDrawable(resource);

}

}

);

设置占位图和加载出错图

Glide.with(this)
.load("http://imgstore.cdn.sogou.com/app/a/100540002/52741171.jpg")
.placeholder(R.mipmap.placeholder)
.error(R.mipmap.error)
.into(((ImageView)findViewById(R.id.image)));

加载GIF

无需设置什么鬼,自动加载,picasso框架就不能加载gif图片

1、只加载静态图

Glide.with(this).load(imageUrl).asBitmap().into(imageView);//显示gif静态图片

2、只加载动态图

Glide.with(this).load(imageUrl).asGif().into(imageView);//显示gif动态图片

加载缩略图

Glide.with(this)
.load("http://imgstore.cdn.sogou.com/app/a/100540002/527471.jpg")
.placeholder(R.mipmap.placeholder)
.error(R.mipmap.error)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.thumbnail(0.1f)//这样,gilde会加载缩略图,再加载全图
.into(((ImageView)findViewById(R.id.image)));

清理磁盘缓存

Glide.get(this).clearDiskCache();//清理磁盘缓存 需要在子线程中执行

Glide.get(this).clearMemory();//清理内存缓存 可以在UI主线程中进行
posted @ 2016-10-05 19:55  iszengmh  阅读(192)  评论(0编辑  收藏  举报