ImageView加载网络图片的大小适配

我们在项目中经常会遇到给ImageView加载网络图片的需求,而服务端给我们的图片size五花八门,我们也得面对五花八门的手机分辨率,此时我们应该给ImageView的layout_width和layout_height设置什么值合适呢?直接match或者wrap肯定不行,会拉伸,导致图片模糊,又不能写固定值,否则可能展示不全。。。下面我说说我的处理方式,解析服务端下发的Url中的size,然后用代码动态设置ImageView的大小即可,代码如下:

if (!TextUtils.isEmpty(imgUrl)) {
            WindowManager wm = (WindowManager) getContext()
                    .getSystemService(Context.WINDOW_SERVICE);
            int width;
            int ivHeight = DisplayUtil.dip2px(100);//给高度设置一个默认值100dp
            try {
                if (wm != null) {
                    width = wm.getDefaultDisplay().getWidth(); //获取屏幕宽度
                    Uri uri = Uri.parse(imgUrl);
                    String size = uri.getQueryParameter("size"); //Url中size的格式为:size=1080x420
                    if (!TextUtils.isEmpty(size) && size.contains("x")) {
                        String[] point = size.split("x");
                        if (TextUtils.isDigitsOnly(point[0]) && TextUtils.isDigitsOnly(point[1])) {
                            if (width > 0) {
                                ivHeight = (int) ((Float.parseFloat(point[1]) / Float.parseFloat(point[0])) * width);//利用宽高比计算出ImageView的合适高度
                            }
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ivHeight);//可根据具体的父布局选择不同的内部类LayoutParams
            imageView.setLayoutParams(params);
        }



猜你喜欢

转载自blog.csdn.net/k_bb_666/article/details/80579296