首先导入glide-3.7.0.jar包 or
//Glide框架
implementation "com.github.bumptech.glide:glide:4.6.1"
然后在代码里编写:
Glide.with(MoiveListFragment.this) //MoiveListFragment为当前类
.load(sb.toString())// 请求图片的路径,可以是网络图片
.crossFade()//淡入效果
.error(R.drawable.ic_favorite_black_36dp) // 出错加载的图片
.into(icon);// 显示到ImageView 上面,icon为绑定了ImageView控件的对象
设置图片为圆角:
RoundedCorners roundedCorners = new RoundedCorners(20);//数字为圆角度数
RequestOptions coverRequestOptions = new RequestOptions()
.transforms(new CenterCrop(), roundedCorners)
.diskCacheStrategy(DiskCacheStrategy.NONE)//不做磁盘缓存
.skipMemoryCache(true);//不做内存缓存
//Glide 加载图片简单用法
Glide.with(context).load(path)
.apply(coverRequestOptions).into(imageView);
设置图片为圆形:
Glide.with(getContext()).load(getResources().getDrawable(R.drawable.vip_head)).apply(RequestOptions.bitmapTransform(new CircleCrop())).into((ImageView) myView.findViewById(R.id.iv_personal_head));
设置本地加载Gif动画:
正确写法:
Glide.with(context).load(R.drawable.load_gif)
.into(imageView);
错误写法:
Glide.with(context).load(getResources().getDrawable(R.drawable.load_gif))
.into(imageView);
根据Url获取Bitmap:
new AsyncTask<Void, Void, Bitmap>() {
@Override
protected Bitmap doInBackground(Void... params) {
Bitmap bitmap = null;
try {
bitmap = Glide.with(context)
.asBitmap()
.load(imgUrl)
//360*480,原始大小设置为Target.SIZE_ORIGINAL
.submit(360, 480).get();
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
}
}.execute();
得到Drawable对象
Glide.with(context).load(data.getPic())
.apply(coverRequestOptions).into(new SimpleTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
imageView.setImageDrawable(resource);
}
});
Glide使用过程中遇到timeout异常的处理方式
在使用glide的使用过程中,当网络不好或是服务端反应不给力的时候,会经常抛出timeout异常,通过fiddler抓包来看,其实图片是会获取到的。但是比较慢。
然后就想到像httpclient和httpurlconnect的使用那样,为glide的设置超时时间,不过并没有找到api。
记得glide可以使用okHttp或是volley做为网络栈,OK~那不妨试试。
代码很简单,在gradle中加入
implementation 'com.github.bumptech.glide:okhttp3-integration:4.8.0@aar'
@aar会将meta数据自动导入androidmanifest,这样就不用修改manifest文件了。
如果你的项目需要混淆,那么还需要在proguard文件中加入
# Glide
-keep public class * implements com.bumptech.glide.module.GlideModule
解决Glide首次进来不加载图片的情况
方法一:
Glide.with(mContent)
.load(school_icon.get(position))
.placeholder(R.drawable.test)
.dontAnimate()//添加这行代码
.into(holder.schoolIcon);
方法二:
.into(new SimpleTarget() {
@Override
public void onResourceReady(GlideDrawable resource,
GlideAnimation glideAnimation) {
iv_img.setImageDrawable(resource);
}
});
设置原图展示:
//new RequestOptions().placeholder(R.mipmap.ic_launcher_round)为设置未加载成功的占位图
Glide.with(imageView).load(uri).apply(new RequestOptions().override(Target.SIZE_ORIGINAL)).into(imageView);
Glide报错:
Glide报错You must not call setTag() on a view Glide is targeting
在Application的代码里
//Glide报错You must not call setTag() on a view Glide is targeting
ViewTarget.setTagId(R.id.glide_tag);
res -> values -> ids.xml
<resources>
<item type="id" name="glide_tag" />
</resources>
参考文章:
https://www.cnblogs.com/guilin-hu/p/5706916.html