Glide图片加载库的使用

(转自:Android开发中文站 » Glide图片加载库的使用)

Glide是 Google推荐的图片加载库,它可以支持来自url,Android资源,文件,Uri中的图片加载,同时还支持gif图片的加载,以及各种图片显示前的bitmap处理(例如:圆角图片,圆形图片,高斯模糊,旋转,灰度等等),缓存处理,请求优先级处理,动画处理,缩略图处理,图片大小自定义等等.可谓是非常的强大.

1.添加Glide库

需要在build.gradle中加入依赖,目前最新的版本是3.7.0,​​Glide库地址​

compile 'com.github.bumptech.glide:glide:3.7.0'

2.加载网络图片


**​​        


​​* Created by mChenys on 2016/6/6.​​


​​*/​​


​​public​​​ ​​class​​​ ​​TestGlideActivity ​​​ ​​extends​​​ ​​Activity {​​


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​String url = ​​​ ​​"http://www.qq745.com/uploads/allimg/141106/1-141106153Q5.png"​​​ ​​;​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(url).​​


​​asBitmap(). ​​​ ​​//强制处理为bitmap​​


​​into(targetView);​​​ ​​//显示到目标View中​​


​​}​​


​​}​​

3.加载资源图片


​​public​​​          ​​class​​​          ​​TestGlideActivity ​​​         ​​extends​​​          ​​Activity {​​        


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​int​​​ ​​resourceId = R.drawable.test;​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(resourceId).​​


​​asBitmap().​​


​​into(targetView);​​


​​}​​


​​}​​


4.加载本地文件图片


​​public​​​          ​​class​​​          ​​TestGlideActivity ​​​         ​​extends​​​          ​​Activity {​​        


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​File file = ​​​ ​​new​​​ ​​File(Environment.getExternalStorageDirectory(), ​​​ ​​"test.jpg"​​​ ​​);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(file).​​


​​asBitmap().​​


​​into(targetView);​​


​​}​​


​​}​​


5.从Uri中加载


​​

/**​​        


​​* Created by mChenys on 2016/6/6.​​


​​*/​​


​​public​​​ ​​class​​​ ​​TestGlideActivity ​​​ ​​extends​​​ ​​Activity {​​


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​Uri uri = Uri.parse(​​​ ​​"android.resource://"​​​ ​​+ ​​​ ​​this​​​ ​​.getPackageName() + ​​​ ​​"/"​​​ ​​+ R.drawable.test);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(uri).​​


​​asBitmap().​​


​​into(targetView);​​


​​}​​


​​}​​


6.加载gif图片


​​

public​​​          ​​class​​​          ​​TestGlideActivity ​​​         ​​extends​​​          ​​Activity {​​        


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(R.drawable.smail).​​


​​asGif().​​​ ​​//注意:这里显示的指明了要加载的是gif图片,当然即使不指明,glide也会自己判断.​​


​​into(targetView);​​


​​}​​


​​}​​


效果图:

Glide图片处理框架(含圆角哦)_图形处理

7.设置默认图片和加载失败时显示的图片


​​public​​​         ​​class​​​         ​​TestGlideActivity ​​​        ​​extends​​​         ​​Activity {​​       


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(R.drawable.test).​​


​​asBitmap().​​


​​placeholder(R.drawable.bg_loading).​​​ ​​//加载中显示的图片​​


​​error(R.drawable.bg_error).​​​ ​​//加载失败时显示的图片​​


​​into(targetView);​​


​​}​​


​​}​​

8.淡入显示效果


public​​​         ​​class​​​         ​​TestGlideActivity ​​​        ​​extends​​​         ​​Activity {​​       


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(R.drawable.test).​​


​​placeholder(R.drawable.bg_loading).​​​ ​​//加载中显示的图片​​


​​error(R.drawable.bg_error).​​​ ​​//加载失败时显示的图片​​


​​crossFade().​​​ ​​//淡入显示,注意:如果设置了这个,则必须要去掉asBitmap​​


​​into(targetView);​​


​​}​​


​​}​​

另外,crossFade还可以接收一个参数来设置淡入显示效果的持续时间,crossFade(int duration);
如果你想直接显示图片,而不是淡入显示图片,则可以通过dontAnimate()方法设置.

9.调整图片像素大小


​​public​​​         ​​class​​​         ​​TestGlideActivity ​​​        ​​extends​​​         ​​Activity {​​       


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(R.drawable.test).​​


​​placeholder(R.drawable.bg_loading).​​​ ​​//加载中显示的图片​​


​​error(R.drawable.bg_error).​​​ ​​//加载失败时显示的图片​​


​​crossFade(​​​ ​​1000​​​ ​​).​​​ ​​//淡入显示的时间,注意:如果设置了这个,则必须要去掉asBitmap​​


​​override(​​​ ​​80​​​ ​​,​​​ ​​80​​​ ​​).​​​ ​​//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高​​


​​into(targetView);​​


​​}​​


​​}​​

10.设置CenterCrop,FitCenter

CenterCrop,FitCenter都是对目标图片进行裁剪,了解过ImageView的ScaleType属性就知道,这2种裁剪方式在ImageView上也是有的,分别对应ImageView的ImageView.ScaleType.CENTER_CROP和mageView.ScaleType.FIT_CENTER的.

​​public​​​         ​​class​​​         ​​TestGlideActivity ​​​        ​​extends​​​         ​​Activity {​​       


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​targetView.setScaleType(ImageView.ScaleType.FIT_CENTER);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(R.drawable.test).​​


​​placeholder(R.drawable.bg_loading).​​​ ​​//加载中显示的图片​​


​​error(R.drawable.bg_error).​​​ ​​//加载失败时显示的图片​​


​​crossFade(​​​ ​​1000​​​ ​​).​​​ ​​//淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap​​


​​override(​​​ ​​80​​​ ​​,​​​ ​​80​​​ ​​).​​​ ​​//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高​​


​​centerCrop().​​​ ​​//中心裁剪,缩放填充至整个ImageView​​


​​into(targetView);​​


​​}​​


​​}​​


11.缓存策略设置

内存缓存设置,通过skipMemoryCache(boolean)来设置是否需要缓存到内存,默认是会缓存到内存的.


​​

/**​​       


​​* Created by mChenys on 2016/6/6.​​


​​*/​​


​​public​​​ ​​class​​​ ​​TestGlideActivity ​​​ ​​extends​​​ ​​Activity {​​


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​targetView.setScaleType(ImageView.ScaleType.FIT_CENTER);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(R.drawable.test).​​


​​placeholder(R.drawable.bg_loading).​​​ ​​//加载中显示的图片​​


​​error(R.drawable.bg_error).​​​ ​​//加载失败时显示的图片​​


​​crossFade(​​​ ​​1000​​​ ​​).​​​ ​​//淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap​​


​​override(​​​ ​​80​​​ ​​,​​​ ​​80​​​ ​​).​​​ ​​//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高​​


​​centerCrop().​​​ ​​//中心裁剪,缩放填充至整个ImageView​​


​​skipMemoryCache(​​​ ​​true​​​ ​​).​​​ ​​//跳过内存缓存​​


​​into(targetView);​​


​​}​​


​​}​​


磁盘缓存,磁盘缓存通过diskCacheStrategy(DiskCacheStrategy)来设置,DiskCacheStrategy一共有4种模式:

  1. DiskCacheStrategy.NONE:什么都不缓存
  2. DiskCacheStrategy.SOURCE:仅缓存原图(全分辨率的图片)
  3. DiskCacheStrategy.RESULT:仅缓存最终的图片,即修改了尺寸或者转换后的图片
  4. DiskCacheStrategy.ALL:缓存所有版本的图片,默认模式


​​

public​​​         ​​class​​​         ​​TestGlideActivity ​​​        ​​extends​​​         ​​Activity {​​       


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​targetView.setScaleType(ImageView.ScaleType.FIT_CENTER);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(R.drawable.test).​​


​​placeholder(R.drawable.bg_loading).​​​ ​​//加载中显示的图片​​


​​error(R.drawable.bg_error).​​​ ​​//加载失败时显示的图片​​


​​crossFade(​​​ ​​1000​​​ ​​).​​​ ​​//淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap​​


​​override(​​​ ​​80​​​ ​​, ​​​ ​​80​​​ ​​).​​​ ​​//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高​​


​​centerCrop().​​​ ​​//中心裁剪,缩放填充至整个ImageView​​


​​skipMemoryCache(​​​ ​​true​​​ ​​).​​​ ​​//跳过内存缓存​​


​​diskCacheStrategy(DiskCacheStrategy.RESULT).​​​ ​​//保存最终图片​​


​​into(targetView);​​


​​}​​


​​}​​


12.缓存设置

在GlideModule 中,我们可以设置磁盘缓存的位置,磁盘缓存的大小和内存缓存的大小,同时还可以设置图片的显示质量.

要是用GlideModule ,需要创建它的实现类,然后在manifests中申明实现类的全类路径:


​​<​​​        ​​meta-data​​       


​​android:name​​​ ​​=​​​ ​​"com.example.mchenys.httputilsdemo.image.glide.module.SimpleGlideModule"​​


​​android:value​​​ ​​=​​​ ​​"GlideModule"​​​ ​​/>​​

GlideModule 的实现类,需要实现applyOptions方法:


/**​​       


​​* 所以你知道要创建一个额外的类去定制 Glide。​​


​​* 下一步是要全局的去声明这个类,让 Glide 知道它应该在哪里被加载和使用。​​


​​* Glide 会扫描 AndroidManifest.xml 为 Glide module 的 meta 声明。​​


​​* 因此,你必须在 AndroidManifest.xml 的 <application> 标签内去声明这个SimpleGlideModule。​​


​​* Created by mChenys on 2016/6/10.​​


​​*/​​


​​public​​​ ​​class​​​ ​​SimpleGlideModule ​​​ ​​implements​​​ ​​GlideModule {​​


​​public​​​ ​​static​​​ ​​DiskCache cache;​​





​​@Override​​


​​public​​​ ​​void​​​ ​​applyOptions(Context context, GlideBuilder builder) {​​


​​// 在 Android 中有两个主要的方法对图片进行解码:ARGB8888 和 RGB565。前者为每个像素使用了 4 个字节,​​


​​// 后者仅为每个像素使用了 2 个字节。ARGB8888 的优势是图像质量更高以及能存储一个 alpha 通道。​​


​​// Picasso 使用 ARGB8888,Glide 默认使用低质量的 RGB565。​​


​​// 对于 Glide 使用者来说:你使用 Glide module 方法去改变解码规则。​​


​​builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);​​


​​//设置缓存目录​​


​​File cacheDir = PathUtils.getDiskCacheDir(context, CacheConfig.IMG_DIR);​​





​​cache = DiskLruCacheWrapper.get(cacheDir, DiskCache.Factory.DEFAULT_DISK_CACHE_SIZE);​​​ ​​// 250 MB​​


​​builder.setDiskCache(​​​ ​​new​​​ ​​DiskCache.Factory() {​​


​​@Override​​


​​public​​​ ​​DiskCache build() {​​


​​return​​​ ​​cache;​​


​​}​​


​​});​​


​​//设置memory和Bitmap池的大小​​


​​MemorySizeCalculator calculator = ​​​ ​​new​​​ ​​MemorySizeCalculator(context);​​


​​int​​​ ​​defaultMemoryCacheSize = calculator.getMemoryCacheSize();​​


​​int​​​ ​​defaultBitmapPoolSize = calculator.getBitmapPoolSize();​​





​​int​​​ ​​customMemoryCacheSize = (​​​ ​​int​​​ ​​) (​​​ ​​1.2​​​ ​​* defaultMemoryCacheSize);​​


​​int​​​ ​​customBitmapPoolSize = (​​​ ​​int​​​ ​​) (​​​ ​​1.2​​​ ​​* defaultBitmapPoolSize);​​





​​builder.setMemoryCache(​​​ ​​new​​​ ​​LruResourceCache(customMemoryCacheSize));​​


​​builder.setBitmapPool(​​​ ​​new​​​ ​​LruBitmapPool(customBitmapPoolSize));​​


​​}​​





​​@Override​​


​​public​​​ ​​void​​​ ​​registerComponents(Context context, Glide glide) {​​


​​}​​


​​}​​

13.设置图片请求的优先级

Glide 可以用 Priority 枚举来设置图片的加载优先级,这样我们就可以针对那些需要显示的图片设置高的优先级了.

Priority 有4种级别:

  • Priority.LOW
  • Priority.NORMAL
  • Priority.HIGH
  • Priority.IMMEDIATE

例如:


​​

/**​​       


​​* 高优先级加载​​


​​* @param url​​


​​* @param imageView​​


​​* @param listener​​


​​*/​​


​​public​​​ ​​static​​​ ​​void​​​ ​​loadImageWithHighPriority(Object url,ImageView imageView, ​​​ ​​final​​​ ​​LoaderListener listener) {​​


​​if​​​ ​​(url == ​​​ ​​null​​​ ​​) {​​


​​if​​​ ​​(listener != ​​​ ​​null​​​ ​​) {​​


​​listener.onError();​​


​​}​​


​​} ​​​ ​​else​​​ ​​{​​


​​Glide.with(imageView.getContext()).​​


​​load(url).​​


​​asBitmap().​​


​​priority(Priority.HIGH).​​​ ​​//高优先级​​


​​dontAnimate().​​


​​listener(​​​ ​​new​​​ ​​RequestListener<Object, Bitmap>() {​​


​​@Override​​


​​public​​​ ​​boolean​​​ ​​onException(Exception e, Object model, Target<Bitmap> target, ​​​ ​​boolean​​​ ​​isFirstResource) {​​


​​if​​​ ​​(​​​ ​​null​​​ ​​!= listener) {​​


​​listener.onError();​​


​​}​​


​​return​​​ ​​false​​​ ​​;​​


​​}​​





​​@Override​​


​​public​​​ ​​boolean​​​ ​​onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, ​​​ ​​boolean​​​ ​​isFromMemoryCache, ​​​ ​​boolean​​​ ​​isFirstResource) {​​


​​if​​​ ​​(​​​ ​​null​​​ ​​!= listener) {​​


​​listener.onSuccess();​​


​​}​​


​​return​​​ ​​false​​​ ​​;​​


​​}​​


​​}).into(imageView);​​


​​}​​


​​}​​


14.设置加载缩略图

通过设置缩略图,我们可以在显示目标图片之前先展示一个第分辨率或者其他图片,当全分辨率的目标图片在后台加载完成后,
Glide会自动切换显示全像素的目标图片.

设置缩略图有2种方式:
通过thumbnail(float)指定0.0f~1.0f的原始图像大小,例如全像素的大小是500*500,如果设置为thumbnail为0.1f,即目标图片的10%,显示的缩略图大小就是50*50;


​​public​​​         ​​class​​​         ​​TestGlideActivity ​​​        ​​extends​​​         ​​Activity {​​       


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​





​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(R.drawable.test).​​


​​placeholder(R.drawable.bg_loading).​​​ ​​//加载中显示的图片​​


​​error(R.drawable.bg_error).​​​ ​​//加载失败时显示的图片​​


​​crossFade(​​​ ​​1000​​​ ​​).​​​ ​​//淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap​​


​​override(​​​ ​​80​​​ ​​, ​​​ ​​80​​​ ​​).​​​ ​​//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高​​


​​centerCrop().​​​ ​​//中心裁剪,缩放填充至整个ImageView​​


​​skipMemoryCache(​​​ ​​true​​​ ​​).​​​ ​​//跳过内存缓存​​


​​diskCacheStrategy(DiskCacheStrategy.RESULT).​​​ ​​//保存最终图片​​


​​thumbnail(​​​ ​​0​​​ ​​.1f).​​​ ​​//10%的原图大小​​


​​into(targetView);​​


​​}​​


​​}​​

通过thumbnail(DrawableRequestBuilder)方式来指定缩略图,该缩略图可以使用load的所有方式(网络,文件,uri,资源)加载.



​​public​​​         ​​class​​​         ​​TestGlideActivity ​​​        ​​extends​​​         ​​Activity {​​       


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​//缩略图请求​​


​​DrawableRequestBuilder<String> thumbnailRequest = Glide​​


​​.with(​​​ ​​this​​​ ​​)​​


​​.load(​​​ ​​"http://www.qq745.com/uploads/allimg/141106/1-141106153Q5.png"​​​ ​​);​​





​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(R.drawable.test).​​


​​// placeholder(R.drawable.bg_loading).//加载中显示的图片​​


​​// error(R.drawable.bg_error).//加载失败时显示的图片​​


​​// crossFade(1000).//淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap​​


​​override(​​​ ​​80​​​ ​​, ​​​ ​​80​​​ ​​).​​​ ​​//设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高​​


​​centerCrop().​​​ ​​//中心裁剪,缩放填充至整个ImageView​​


​​skipMemoryCache(​​​ ​​true​​​ ​​).​​​ ​​//跳过内存缓存​​


​​diskCacheStrategy(DiskCacheStrategy.RESULT).​​​ ​​//保存最终图片​​


​​thumbnail(thumbnailRequest).​​​ ​​//设置缩略图​​


​​into(targetView);​​


​​}​​


15,设置圆角







public class GlideCircleTransform extends BitmapTransformation {
public GlideCircleTransform(Context context) {
super(context);
}

@Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return circleCrop(pool, toTransform);
}

private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null;

int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;

// TODO this could be acquired from the pool too
Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);

Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
}

Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, paint);
return result;
}

@Override public String getId() {
return getClass().getName();
}
}



自定义一个extend BitmapTransformation的方法,把获得的bitmap转化成圆形图片,下面是使用方法


private RequestManager glideRequest;
glideRequest = Glide.with(this);
glideRequest.load("https://www.baidu.com/img/bdlogo.png").transform(new GlideCircleTransform(context)).into(imageView);



这里不得不强调下Glide的一个强大的功能,当你在With后面的传Activity或者Fragment,Glide就可以根据当前Activity或者Fragment的生命周期维护图片的生命周期,比如但activity销毁的时候,就会自动取消需要加载的图片

 

下载图片转换层圆角图片的方法


public class GlideRoundTransform extends BitmapTransformation {

private static float radius = 0f;

public GlideRoundTransform(Context context) {
this(context, 4);
}

public GlideRoundTransform(Context context, int dp) {
super(context);
this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
}

@Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return roundCrop(pool, toTransform);
}

private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null;

Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
}

Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
canvas.drawRoundRect(rectF, radius, radius, paint);
return result;
}

@Override public String getId() {
return getClass().getName() + Math.round(radius);
}
}



在这个方法里面,你可以自定义圆角的大小,使用方式也非常简单


glideRequest.load("https://www.baidu.com/img/bdlogo.png").transform(new GlideRoundTransform(context)).into(imageView);

glideRequest.load("https://www.baidu.com/img/bdlogo.png").transform(new GlideRoundTransform(context, 10)).into(imageView);









1.添加Glide库

需要在build.gradle中加入依赖,目前最新的版本是3.7.0,​​Glide库地址​

compile 'com.github.bumptech.glide:glide:3.7.0'

2.加载网络图片


​​/**​​        


​​* Created by mChenys on 2016/6/6.​​


​​*/​​


​​public​​​ ​​class​​​ ​​TestGlideActivity ​​​ ​​extends​​​ ​​Activity {​​


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​String url = ​​​ ​​"http://www.qq745.com/uploads/allimg/141106/1-141106153Q5.png"​​​ ​​;​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(url).​​


​​asBitmap(). ​​​ ​​//强制处理为bitmap​​


​​into(targetView);​​​ ​​//显示到目标View中​​


​​}​​


​​}​​


3.加载资源图片


​​public​​​          ​​class​​​          ​​TestGlideActivity ​​​         ​​extends​​​          ​​Activity {​​        


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​int​​​ ​​resourceId = R.drawable.test;​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(resourceId).​​


​​asBitmap().​​


​​into(targetView);​​


​​}​​


​​}​​

4.加载本地文件图片


​​public​​​          ​​class​​​          ​​TestGlideActivity ​​​         ​​extends​​​          ​​Activity {​​        


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​File file = ​​​ ​​new​​​ ​​File(Environment.getExternalStorageDirectory(), ​​​ ​​"test.jpg"​​​ ​​);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(file).​​


​​asBitmap().​​


​​into(targetView);​​


​​}​​


​​}​​

5.从Uri中加载


/**​​        


​​* Created by mChenys on 2016/6/6.​​


​​*/​​


​​public​​​ ​​class​​​ ​​TestGlideActivity ​​​ ​​extends​​​ ​​Activity {​​


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​Uri uri = Uri.parse(​​​ ​​"android.resource://"​​​ ​​+ ​​​ ​​this​​​ ​​.getPackageName() + ​​​ ​​"/"​​​ ​​+ R.drawable.test);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(uri).​​


​​asBitmap().​​


​​into(targetView);​​


​​}​​


​​}​​

6.加载gif图片

​​public​​​          ​​class​​​          ​​TestGlideActivity ​​​         ​​extends​​​          ​​Activity {​​        


​​@Override​​


​​protected​​​ ​​void​​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​​ ​​.onCreate(savedInstanceState);​​


​​setContentView(R.layout.activity_test);​​


​​ImageView targetView = (ImageView) findViewById(R.id.iv_target);​​


​​Glide.with(​​​ ​​this​​​ ​​).​​


​​load(R.drawable.smail).​​


​​asGif().​​​ ​​//注意:这里显示的指明了要加载的是gif图片,当然即使不指明,glide也会自己判断.​​


​​into(targetView);​​


​​}​​


​​}​​


效果图: