根据图片的宽高和控件的宽高,对图片进行缩放,实现图片的完整显示。
自定义控件继承ImageView,在onDraw(),方法中计算。
@Override protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (drawable == null) { return; } if (getWidth() == 0 || getHeight() == 0) { return; } this.measure(0, 0); if (drawable.getClass() == NinePatchDrawable.class) { return; } else if (drawable instanceof AsyncDrawable) { return; } Bitmap b = ((BitmapDrawable) drawable).getBitmap(); Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); if (bitmap.getWidth() == 0 || bitmap.getHeight() == 0) { return; } if (defaultWidth == 0) { defaultWidth = getWidth(); } if (defaultHeight == 0) { defaultHeight = getHeight(); } float scaleHeght = (float) defaultHeight / (float) bitmap.getHeight(); float scaleWight = (float) defaultWidth / (float) bitmap.getWidth(); if (scaleHeght >= scaleWight) { scale = scaleWight; } else { scale = scaleHeght; } defaultWidth = Math.round(bitmap.getWidth() * scale); defaultHeight = Math.round(bitmap.getHeight() * scale); LayoutParams params = this.getLayoutParams(); params.width = defaultWidth; params.height = defaultHeight; this.setLayoutParams(params); super.onDraw(canvas); }