ImageView根據寬高完整顯示圖片
阿新 • • 發佈:2019-01-04
根據圖片的寬高和ImageView的寬高,實現圖片不壓縮、不裁剪顯示圖片。
自定義控制元件繼承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; } // scale = (float) defaultHeight / (float) bitmap.getHeight(); 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); }