版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35427437/article/details/83995266
介绍:
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 V4使用案例。
-
单个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); }
我们简单看下如何使用
首先是普通的加载
效果图
代码实现
Glide.with(this).load(url).into(iv_demo);
填充式的加载图片
效果图
代码实现:
Glide.with(this).load(url).centerCrop().into(iv_demo);
加载圆形图片
效果图
代码实现(需要自定义实现GlideCircleTransform这个类)
Glide.with(this).load(url).transform(new GlideCircleTransform(this)).into(iv_demo);
加载带边角的图片
效果图
代码实现(需要自定义实现GlideRoundTransform这个类)
Glide.with(this).load(url).transform(new GlideRoundTransform(this)).into(iv_demo);
加载本地图片
代码实现
Glide.with(this).load(R.drawable.ic_launceher).transform(new GlideRoundTransform(this)).into(iv_demo);
加载sd卡图片
代码实现
Glide.with(this).load(path).transform(new GlideRoundTransform(this)).into(iv_demo);
稍微高级点的用法
设置不加载内存中的图片
Glide.with(this).load(path)
.skipMemoryCache(true)
.transform(new GlideRoundTransform(this)).into(iv_demo);
设置本地磁盘不缓存图片
Glide.with(this).load(path)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.transform(new GlideRoundTransform(this)).into(iv_demo);
设置加载图片失败显示的图片
Glide.with(this).load(path)
.error(R.drawable.patient_sex)
.transform(new GlideRoundTransform(this)).into(iv_demo);
设置在加载图片中时候默认显示的图片
Glide.with(this).load(path)
.placeholder(R.drawable.patient_sex)
.transform(new GlideRoundTransform(this)).into(iv_demo);
设置圆自定义类
package com.example.yukuo.glidedemo;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
/**
* 这是一个将网络图片转换为圆形的方法
*/
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 Bitmap circleCrop(BitmapPool pool, Bitmap toTransform) {
if (toTransform == null) return null;
int size = Math.min(toTransform.getWidth(), toTransform.getHeight());
int x = (toTransform.getWidth() - size) / 2;
int y = (toTransform.getHeight() - size) / 2;
// TODO this could be acquired from the pool too
Bitmap squared = Bitmap.createBitmap(toTransform, 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();
}
}
设置圆角类
package com.example.yukuo.glidedemo;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
/**
*
* 这是一个加载网络图片设置圆角的类
*/
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);
}
}