Glide 判断图片是否存在 以及获得宽高

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;
            }
        }); 

大功告成。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值