0 .Thanks
項目地址
Android Glide圖片加載(加載監(jiān)聽纷宇、加載動畫)
【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 .加載完成監(jiān)聽
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 .加載優(yōu)先級
在Glide的內部,圖片的加載可以變得有優(yōu)先級:
通過:.priority( Priority.HIGH )
設置
6 .其他的小問題
1)Glide去加載頭像:
-
使用Glide去加載頭像
在實際項目當中镊辕,我遇到一個 問題:客戶端更新頭像油够,方法是:URL不會變,但是圖片內容會改變征懈。
這樣石咬,就會在客戶端上遺留一個問題:客戶端是以URL作為
圖片緩存的key,所以卖哎,每次更新頭像鬼悠,而本地的圖片卻不會
變删性,因為URL不變,緩存沒有更新焕窝。對于上面的問題蹬挺,客戶端可以采用這樣的操作:每次更新完頭像
之后,順便把頭像的緩存給替換一下它掂,OK巴帮,這樣的話,可以
更新頭像虐秋。然后榕茧,我們又發(fā)現(xiàn),會存在另外一個隱患:用戶A在手機M,N
都登陸過熟妓,然后,其手機M栏尚,N上都緩存這一個相同Key的URL頭像起愈,
而,當用戶在手機M上更新了頭像译仗,成功了抬虽。但是當他在手機N上
登陸的時候,發(fā)現(xiàn)頭像還是之前那個纵菌。有人說阐污,把圖片設置成,每次
讀取都去獲取服務器的圖片咱圆,不做任何緩存笛辟。但是,這樣序苏,緩存就
沒有意義了手幢。最終解決方法(綜合網上的解法)
1)服務器接口更改:
記錄每次更新頭像的時間:例如有頭像:http://xxx/headpic/125.png
在其更新后,保留其時間戳忱详,拼接到URL后面围来,以?作為分隔符:
http://xxx/headpic/125.png?1324564
這樣匈睁,每次客戶端在獲取到這個URL的時候监透,就直接走緩存策略。
每次更新的URL航唆,都會改變胀蛮,而在任何的地方上獲取URL都保證是能
識別到最新的頭像URL。