Glide作为一个网络记载框架,功能强大自然不用说。前段时间产品要求获得图片之后,按照屏幕的宽度去计算高度。而后台告诉我们,只给Url 不保证图片真实存在。扎心了,老铁。
我一阵百度,一阵谷歌。没有找到(谁找得到了给我说一下,谢谢)。
没办法,我想了一下,转换思路,先将图片转成bitmap,如果bitmap不为空的话,是不是就可以判断图片真实存在了。按照这个思路。我找到了Glide一个东西 RequestListener接口。可以打开看看。有两个需要实现的方法:onException和onResourceReady
我猜测:第一个方法就是发生异常的处理,第二个方法中的bitmap 就是真实存在的(而且可以通过此bitmap获取宽高)。通过设置发现确实如此。
public static void loadMessageImage(Context context, int defaultId, String resourceId, final ImageView imageView, RequestListener listener) {
Glide.with(context)
.load(BASE_URL_IMG + resourceId).asBitmap()
.placeholder(defaultId)
.listener(listener)
.into(imageView);
Log.e(“jxx245”, BASE_URL_IMG + resourceId);
}`
上面这个是封装的方法
下面是应用的
GlideManager.loadMessageImage(context, R.drawable.shape_white_xian, "/msg/" + entity.getId() + "/title.png", holder.imageIv, new RequestListener<String, Bitmap>() {
@Override
public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {
holder.imageIv.setVisibility(View.GONE);
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
if (resource!=null){
holder.imageIv.setVisibility(View.VISIBLE);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) holder.imageIv.getLayoutParams();
float resource_width = (float) resource.getWidth();
float resource_height = (float) resource.getHeight();
params.width = imageviewWidth;
float height = (imageviewWidth / resource_width) * resource_height;
params.height = (int)height;
params.setMargins(15, 15, 15, 0);
holder.imageIv.setLayoutParams(params);
holder.imageIv.setImageBitmap(resource);
}else {
// holder.imageIv.setVisibility(View.GONE);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) holder.imageIv.getLayoutParams();
float resource_width = (float) resource.getWidth();
float resource_height = (float) resource.getHeight();
params.width = imageviewWidth;
float height = 1;
params.height = (int)height;
// params.setMargins(0, 0, 15, 0);
holder.imageIv.setLayoutParams(params);
}
return false;
}
});
大功告成。