我们在项目中经常会遇到给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);
}