实现瀑布流过程中使用glide来获取网络图片。
现在有这么一个需求:根据图片的宽高比来设置ImageView的宽高比。
因此需要用到glide的target回调来自己处理bitmap。
Glide.with(img.getContext())
.load(imgUrl)
.asBitmap()
.placeholder(R.drawable.v)//设置加载中图片
.error(R.drawable.v)//设置加载失败图片
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(target);
private SimpleTarget target = new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) {
int bitmapWidth = bitmap.getWidth();//获取网络图片宽度
int bitmapHeight = bitmap.getHeight();//获取网络图片高度
int width = ScreenUtil.getScreenWidth(img.getContext());//获取屏幕宽度
//设置ImageView的参数
ViewGroup.LayoutParams params = img.getLayoutParams();
//设置图片的相对于屏幕的宽高比
params.width = width / clolums;
params.height = (bitmapHeight * params.width) / bitmapWidth;
img.setLayoutParams(params);
Glide.with(img.getContext())
.load(imgUrl)
.override(params.width, params.height)//重定义加载网络图片大小
.placeholder(R.drawable.v)//设置加载中图片
.error(R.drawable.v)//设置加载失败图片
.dontAnimate()//移除动画
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(img);
}
};
接下来应该很多人会问为什么再次调用 glide,为什么不直接处理bitmap,然后给 imageview 设置bitmap。
因为.asBitmap()后.placeholder()无效果,所以只能再进行一次glide调用。
(PS:如果设置了加载中的占位图,那么得加上.dontAnimate(),要不会出现奇怪的现象)
网友评论