自己看,記錄glide載入進度的問題:
在build.gradle中新增 依賴
implementation 'com.github.bumptech.glide:glide:4.7.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
implementation "com.github.bumptech.glide:okhttp3-integration:4.7.1"
複製程式碼
在 okhttp3-integration 中已經有為我們做好了 使用 okhttp 做為glide的載入底層
此時我們只需 替換一下即可
//這個註解表示 glide一進來就要替換的module
@com.bumptech.glide.annotation.GlideModule
public class MyGlideModule extends AppGlideModule {
@Override
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
// 寫入我們們的okhttp
OkHttpClient.Builder builder = new OkHttpClient.Builder();
// 寫入我們們的okhttp的攔截器,在攔截器中監聽進度
builder.addInterceptor(new ProgressInterceptor());
OkHttpClient okHttpClient = builder.build();
// glide吧urlConnection替換為okhttp
registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(okHttpClient));
}
複製程式碼
剩下來就可以按照 郭霖的一片部落格開始就行了
其實t3 之上的東西 也就是 okhttp3-integration的東西
注意點 載入的時候 一定要把 diskCacheStrategy(DiskCacheStrategy.NONE) 跳過sd卡快取, 否則他會走sd卡,不會從網上直接下載的
再我們們要監聽的地方
//開始監聽某個url
ProgressInterceptor.addListener(mImgurl, new ProgressListener() {
@Override
public void onProgress(int progress) {
Log.e("download",progress+"");
}
});
//開始展示
Glide.with(ImagDetailActivity.this).load(mImgurl).listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
//載入失敗 移除監聽
ProgressInterceptor.removeListener(mImgurl);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
//成功 移除監聽
Log.e("download是否第一次",isFirstResource+"---"+model+"----"+dataSource);
ProgressInterceptor.removeListener(mImgurl);
return false;
}
}).into(mIvImagDetail);
複製程式碼