如果你只是想监听,不想修改Glide的默认行为,你可以继承任何一个Glide对ImageViewTargets的默认实现:
-
GlideDrawableImageViewTarget - 默认的Target,用于正常的加载和asGif()。(重写onResourceReady 方法后 .asGif() 可省略 )
-
BitmapImageViewTarget - 当使用asBitmap()加载时,使用的默认Target。
开始( onLoadStarted ),完成( onResourceReady ),失败( onLoadFailed )。这三个方法可视情况重写。完成方法在重写的时候需要注意
super.onResourceReady(resource, glideAnimation)
是需要保留的,其他方法中的,则可有可无。
示例代码:
Glide.with(context).load(mImageUrl).placeholder(R.drawable.default_error).into(new GlideDrawableImageViewTarget(mImageView) {
@Override
public void onLoadStarted(Drawable placeholder) {
progressBar.setVisibility(View.VISIBLE);
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
progressBar.setVisibility(View.GONE);
Toast.makeText(getActivity(), "图片加载失败", Toast.LENGTH_SHORT).show();
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
super.onResourceReady(resource, glideAnimation);
mImageView.setImageDrawable(resource);
progressBar.setVisibility(View.GONE);
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
这样我们就可以在 Glide 加载图片的过程中,进行添加自己的需求逻辑了。
今天主要研究了Glide获取图片Path、Bitmap用法,相信也困扰了大家很久,我在网上也找了很久,基本没有,后来研究了下,也参考了下api文档,总结了以下几个方式:
1. 获取Bitmap:
1)在图片下载缓存好之后获取
-
Glide.with(mContext).load(url).asBitmap().into(
new
SimpleTarget<Bitmap>() {
-
@Override
-
public
void
onResourceReady(Bitmap resource, GlideAnimation<?
super
Bitmap> glideAnimation) {
-
image.setImageBitmap(resource);
-
}
-
});
上面是简单方法,下面有全面的方法,可以完美控制:
-
Glide.with(mContext).load(url).asBitmap().into(
new
Target<Bitmap>() {
-
@Override
-
public
void
onLoadStarted(Drawable placeholder) {
-
-
}
-
-
@Override
-
public
void
onLoadFailed(Exception e, Drawable errorDrawable) {
-
-
}
-
-
@Override
-
public
void
onResourceReady(Bitmap resource, GlideAnimation<?
super
Bitmap> glideAnimation) {
-
-
}
-
-
@Override
-
public
void
onLoadCleared(Drawable placeholder) {
-
-
}
-
-
@Override
-
public
void
getSize(SizeReadyCallback cb) {
-
-
}
-
-
@Override
-
public
void
setRequest(Request request) {
-
-
}
-
-
@Override
-
public
Request getRequest() {
-
return
null
;
-
}
-
-
@Override
-
public
void
onStart() {
-
-
}
-
-
@Override
-
public
void
onStop() {
-
-
}
-
-
@Override
-
public
void
onDestroy() {
-
-
}
-
});
2)通过url获取
-
Bitmap myBitmap = Glide.with(applicationContext)
-
.load(yourUrl)
-
.asBitmap()
-
.centerCrop()
-
.into(
500
,
500
)
-
.get()
2. 获取图片缓存路径
-
FutureTarget<File> future = Glide.with(mContext)
-
.load(
"url"
)
-
.downloadOnly(
500
,
500
);
-
try
{
-
File cacheFile = future.get();
-
String path = cacheFile.getAbsolutePath();
-
}
catch
(InterruptedException e) {
-
e.printStackTrace();
-
}
catch
(ExecutionException e) {
-
e.printStackTrace();
-
}
等比例缩放
图片
在聊天列表中比较常见,而不是显示固定宽高的
图片
。最近对IM项目迁移到Androidx时,顺便升级了
glide
,发现
glide
等比例缩放
图片
出现bug(自定义
ImageView
Target
实现
图片
缩放),第一次能正常
加载
,第二次无法正常等比例缩放。原来项目是使用
glide
3.7.0,现在是使用gilde 4.11.0 (4.10.0开始支持AndroidX)
不同版本...
pre是指在setXXX方法前进行的操作,如果调用preScale后又调用setScale,则前者会被覆盖,post则是在setXXX的操作执行后,(例如缩放旋转)进行的操作。一开始我在自定义的
Bitmap
Transfromation中进行了
Bitmap
操作,主要是对
bitmap
进行裁剪和缩放,但是在项目运行之后抛出了。调研发现可以直接submit(int width, int height)方法直接下载目标尺寸的
bitmap
。首先,如果直接使用
glide
的链式调用会存在效果覆盖的问题。
使用
glide
加载
图片
失败后,设置
imageView
ImageDrawable或者Batmip无效
如标题,一个小需求在
监听
Glide
图片
加载
失败后,直接设置
imageView
为固定背景,代码如下所示:
Glide
.with(ivHead).load(new
Glide
Url(headUrl, headers))
.addListener(new RequestListener<Drawable>() {
@Overr
Android开发中,
Bitmap
是经常会遇到的对象,特别是在列表
图片
展示、大图显示等界面。而
Bitmap
实实在在是内存使用的“大客户”。如何更好的使用
Bitmap
,减少其对App内存的使用,是Android优化方面不可回避的问题。因此,本文从常规的
Bitmap
使用,到
Bitmap
内存计算进行了介绍,最后分析了
Bitmap
的源码和其内存模型在不同版本上的变化。
Bitmap
的使用
一般来说,一个对...
引发场景:使用
Glide
加载
高清大图的时候,在
加载
过程中,显示一个
加载
进度条,
加载
结束之后,取消进度条。
Glide
ImageView
Target
API相关方法介绍: void onLoadCleared(Drawable placeholder)
加载
时调用生命周期回调,取消了和它的资源释放。一般情况不需要我们操作。void onLoadFailed(Exception e, Drawab
glide
利用View
Target
解决
加载
ImageView
闪烁的问题
由于需求的原因,无法使用placeholder设置占位图,只能在
监听
到
图片
加载
失败后,设置
图片
的背景等在做一些其他的操作。但是存在一个问题,即
加载
失败的url由于没有缓存,如果下次刷新还是
加载
失败的话,明明
监听
的是失败的回调逻辑,但是设置的默认背景图还是会闪一下。代码如下。
Glide
.with(iv).load(url)
.addListener(new RequestListener<Drawa
目前在android项目上,
图片
加载
库有很多选择,
Glide
是主流的
加载
库之一,作为一个被google推荐的开源库,它有着跟随页面周期、支持gif和webp、支持多种数据源等特点,并且使用起来很简单,本篇文章将会分析
Glide
的
加载
流程,但是
Glide
的源码比较复杂,我将从
Glide
的最简单使用分析
Glide
是如何去
加载
一张
图片
的。(一)从
Glide
.with(context)入手
Glide
.wi...
大家好,今天我们继续学习
Glide
。在上一篇文章当中,我带着大家一起深入探究了
Glide
的缓存机制,我们不光掌握了
Glide
缓存的使用方法,还通过源码分析对缓存的工作原理进行了了解。今天是这个
Glide
系列的第四篇文章,我们又要选取一个新的功能模块开始学习了,那么就来研究一下
Glide
的回调和
监听
功能吧。今天的学习模式仍然是以基本
用法
和源码分析相结合的方式来进行的
在 Android 通过 JNI 去调用
Bitmap
,通过 CMake 去编 so 动态链接库的话,需要添加 jnigraphics 图像库。
target
_link_libraries( # Specifies the
target
library.
native-operation
.placeholder(R.mipmap.mine_placehold)
.dontAnimate()
2:使用
Glide
加载
的
图片
,
获取
bitmap
转为为string是报错
一、简介这一小节讲一下
Glide
4指定
图片
大小显示的方法,实际上,使用
Glide
在大多数情况下我们都是不需要指定
图片
大小的,因为
Glide
会自动根据
ImageView
的大小来决定
图片
的大小,以此保证
图片
不会占用过多的内存从而引发OOM。不过,如果你真的有这样的需求,必须给
图片
指定一个固定的大小,
Glide
仍然是支持这个功能的。非常简单,下面直接上代码就ok了!二、指定固定尺寸这里使用overrid...