[Android] Glide 教學

介紹

https://muyangmin.github.io/glide-docs-cn/

Glide是一個快速高效的Android圖片加載庫,注重於平滑的滾動。Glide提供了易用的API,高性能、可擴展的圖片解碼管道(decode pipeline),以及自動的資源池技術。



API

  • .load(url):載入網址或本地端位置
  • .error(iconID):載入錯誤時顯示的圖
  • .fallback(image id):URL = null 時顯示的圖
  • .placeholder(image id):載入中顯示的圖
  • .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC):設定快取模式
  • .skipMemoryCache(true):跳過記憶體緩存
  • .into(imageView):載入的目標ImageView
  • .clearMemory():清除記憶體
  • .clearDiskCache():清除快取
  • .listener()



實作

實際用法

Glide.with(context).load(url).into(imageView);


監聽 Listener

Glide.with(context).load(url)
    .into(imageView)
    .listener(new RequestListener<drawable>() {
      @Override
      public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<drawable> target, boolean isFirstResource) {
          return false;
      }

      @Override
      public boolean onResourceReady(final Drawable resource, Object model, Target<drawable> target, DataSource dataSource, boolean isFirstResource) {
          ((Activity) ctx).runOnUiThread(() -&gt; {
              holder.progressBar.setVisibility(View.GONE);
              holder.imgPreview.setVisibility(View.VISIBLE);
              holder.imgPreview.setImageDrawable(resource);
          });
          return false;
      }
    })
    .submit();


解決TimeOut問題:

更換使用的套件,可更換成OKHttp、Volley

  • Gradle
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.11.0@aar' 

implementation 'com.android.volley:volley:1.1.1'
implementation "com.github.bumptech.glide:volley-integration:4.9.0@aar"

annotationProcessor 'androidx.annotation:annotation:1.1.0' 
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'  
  • Code
@GlideModule  
public class VolleyGlideModel extends AppGlideModule {
    public static final String TAG = VolleyGlideModel.class.getSimpleName();   

    @Override   
    public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
        super.registerComponents(context, glide, registry);
        Log.d(TAG, "register options");

        RequestQueue queue = new RequestQueue(new BasicNetwork(new HurlStack())) {
            @Override   
            public <t> Request<t> add(Request<t> request) {
                request.setRetryPolicy(new DefaultRetryPolicy(40 * 1000, 2, 2));
                return super.add(request);
            }
        };

        queue.start();
        registry.replace(GlideUrl.class, InputStream.class, new VolleyUrlLoader.Factory(queue));
    }
}

留言

這個網誌中的熱門文章

[ 教程 - 破解 ] IOS 10.2 JB 教學

[教學] AdMob for Android App