0 .Thanks
项目地址
Android Glide图片加载(加载监听、加载动画)
【Glide】重新加载图片
---导入:2017年2月15日19:06:06
repositories {
mavenCentral() // jcenter() works as well because it pulls from Maven Central
}
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:19.1.0'
}
1 .基本用法
Glide
.with( context )
.placeholder(R.drawable.loading)
.error(R.drawable.failed)
.load( eatFoodyImages[0] )
.into( imageViewInternet );
- with : 传入Context,最好传入Activity,Glide会根据Activity的生命周期去加载,当Activity Destory的时候,其加载会取消。
- load : 图片的地址:可以是Drawable, ResId, URL 等等。
- into : 图片加载的目标。其必须是<? extend ImageView> .
- placeholder : 放置一张占位符,也就是在加载进行的时候所显示的
- error :加载失败显示的图片
2 .设置其缓存策略
在默认情况下,例如上面的请求,Glide默认开启:磁盘缓存,内存缓存。
我们可以控制这个策略:
Glide
.with( context )
.placeholder(R.drawable.loading)
.error(R.drawable.failed)
.skipMemoryCache( true )
.diskCacheStrategy( DiskCacheStrategy.NONE )
.load( eatFoodyImages[0] )
.into( imageViewInternet );
- skipMemoryCache : true:设置内存缓存,false:不适用内存缓存
- diskCacheStrategy :传入的是一个枚举:
- DiskCacheStrategy.NONE :不缓存图片
- DiskCacheStrategy.SOURCE :缓存图片源文件
- DiskCacheStrategy.RESULT:缓存修改过的图片
- DiskCacheStrategy.ALL:缓存所有的图片,默认
3 .动画
- 添加图片淡入加载的效果 : .crossFade()
- 添加自定义动画:
- .animate( android.R.anim.slide_in_left ) //在图片从网络加载完并准备好之后将从左边滑入。
- Java代码动画:
ViewPropertyAnimation.Animator animationObject = new ViewPropertyAnimation.Animator() {
@Override
public void animate(View view) {
// if it's a custom view class, cast it here
// then find subviews and do the animations
// here, we just use the entire view for the fade animation
view.setAlpha( 0f );
ObjectAnimator fadeAnim = ObjectAnimator.ofFloat( view, "alpha", 0f, 1f );
fadeAnim.setDuration( 2500 );
fadeAnim.start();
}
};
然后再Glide中设置: .animate( animationObject )
4 .加载完成监听
Glide.with(ShowImgActivity.this)
.load(urlString)
.centerCrop()
.error(R.drawable.failed)
.crossFade()
.into(new GlideDrawableImageViewTarget(imageView) {
@Override
public void onResourceReady(GlideDrawable drawable, GlideAnimation anim) {
super.onResourceReady(drawable, anim);
//在这里添加一些图片加载完成的操作
}
)};
5 .加载优先级
在Glide的内部,图片的加载可以变得有优先级:
通过:.priority( Priority.HIGH )
设置
6 .其他的小问题
1)Glide去加载头像:
-
使用Glide去加载头像
在实际项目当中,我遇到一个 问题:客户端更新头像,方法是:URL不会变,但是图片内容会改变。
这样,就会在客户端上遗留一个问题:客户端是以URL作为
图片缓存的key,所以,每次更新头像,而本地的图片却不会
变,因为URL不变,缓存没有更新。对于上面的问题,客户端可以采用这样的操作:每次更新完头像
之后,顺便把头像的缓存给替换一下,OK,这样的话,可以
更新头像。然后,我们又发现,会存在另外一个隐患:用户A在手机M,N
都登陆过,然后,其手机M,N上都缓存这一个相同Key的URL头像,
而,当用户在手机M上更新了头像,成功了。但是当他在手机N上
登陆的时候,发现头像还是之前那个。有人说,把图片设置成,每次
读取都去获取服务器的图片,不做任何缓存。但是,这样,缓存就
没有意义了。最终解决方法(综合网上的解法)
1)服务器接口更改:
记录每次更新头像的时间:例如有头像:http://xxx/headpic/125.png
在其更新后,保留其时间戳,拼接到URL后面,以?作为分隔符:
http://xxx/headpic/125.png?1324564
这样,每次客户端在获取到这个URL的时候,就直接走缓存策略。
每次更新的URL,都会改变,而在任何的地方上获取URL都保证是能
识别到最新的头像URL。