Glide載入進度

weixin_34402408發表於2018-07-26

自己看,記錄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);
複製程式碼

相關文章