[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(() -> {
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));
}
}
留言
張貼留言