日常开发中,我们在加载网络图片的时候用安卓的几个自带的属性是解决不了我们的需求的,有时候在一个RecycleView中户要求宽度固定,而高度确实不同的,这里我们在列表中是无法实现的,就需要我们去做一个图片的自适应高度去解决问题了,下面就具体说一说怎么个图片自适应高度:
首先,我们首先要知道网络图片的宽高,这里我们可以用Glide框架来实现:
Glide.with(context).asBitmap().load(mList.get(position).getLogo()).into(new SimpleTarget<Bitmap>() { @Override public void onLoadFailed(@Nullable Drawable errorDrawable) { finalIvMainVehicle.setImageResource(R.drawable.vehicles_image3); } @Override public void onResourceReady(Bitmap bitmap, Transition<? super Bitmap> transition) { int width = bitmap.getWidth(); int height = bitmap.getHeight(); LinearLayout.LayoutParams layoutParams = setImage(width, height); finalIvMainVehicle.setLayoutParams(layoutParams); finalIvMainVehicle.setImageBitmap(bitmap); } });
在onResoureReady()里面可以得到图片的宽高,然后我们可以确定自己的宽度,根据获取的图片宽高比来设置这个自适应的高度,方法都在setImage()里面,这里面宽度我设置了屏幕的0.6,代码如下:
private LinearLayout.LayoutParams setImage(int width, int height) { WindowManager wm = ((SelectVehicleSeriesActivity)context).getWindowManager(); int pWidth =(int)((wm.getDefaultDisplay().getWidth())*0.60); float ratio = (float) ((width*1.0)/(pWidth*1.0)); int pHeight = (int) (height*1.0/ratio); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(pWidth,pHeight); return lp; }这样就可以设置图片的自适应高度了。