android glide失败监听,Android 关于Glide的拓展(高斯模糊、加载监听、圆形图片)
时间: 2023-11-26 10:03:20 浏览: 37
关于Glide的加载监听,可以使用RequestListener接口实现。例如:
```
Glide.with(context)
.load(imageUrl)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
// 加载失败时的逻辑处理
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
// 加载成功时的逻辑处理
return false;
}
})
.into(imageView);
```
其中,onLoadFailed()方法在加载失败时被调用,返回值表示是否要继续展示占位图;onResourceReady()方法在加载成功时被调用,返回值同样表示是否要继续展示占位图。
关于Glide的拓展,可以使用Glide的Transformation接口实现。例如,实现高斯模糊:
```
public class BlurTransformation extends BitmapTransformation {
private static final int MAX_RADIUS = 25;
private static final int DEFAULT_DOWN_SAMPLING = 1;
private Context context;
private int radius;
private int sampling;
public BlurTransformation(Context context) {
this(context, MAX_RADIUS, DEFAULT_DOWN_SAMPLING);
}
public BlurTransformation(Context context, int radius) {
this(context, radius, DEFAULT_DOWN_SAMPLING);
}
public BlurTransformation(Context context, int radius, int sampling) {
super();
this.context = context;
this.radius = radius;
this.sampling = sampling;
}
@Override
protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {
int width = toTransform.getWidth();
int height = toTransform.getHeight();
int scaledWidth = width / sampling;
int scaledHeight = height / sampling;
Bitmap bitmap = pool.get(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.scale(1 / (float) sampling, 1 / (float) sampling);
Paint paint = new Paint();
paint.setFlags(Paint.FILTER_BITMAP_FLAG);
canvas.drawBitmap(toTransform, 0, 0, paint);
bitmap = FastBlurUtil.doBlur(bitmap, radius, true);
return bitmap;
}
@Override
public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
messageDigest.update(("blur(" + radius + "," + sampling + ")").getBytes(CHARSET));
}
}
```
其中,FastBlurUtil.doBlur()方法是自定义的快速高斯模糊算法,可以在GitHub上搜索相关的库。
还可以实现圆形图片:
```
public class CircleTransformation extends BitmapTransformation {
public CircleTransformation(Context context) {
super(context);
}
@Override
protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {
int size = Math.min(toTransform.getWidth(), toTransform.getHeight());
int x = (toTransform.getWidth() - size) / 2;
int y = (toTransform.getHeight() - size) / 2;
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();
}
}
```
以上是一些Glide的拓展示例,可以根据需求进行修改和扩展。