==
public class SmartImageView extends ImageView { public SmartImageView(Context context) { super(context); } public SmartImageView(Context context, AttributeSet attrs) { super(context, attrs); } public SmartImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { try { Drawable drawable = getDrawable(); if (drawable == null) { setMeasuredDimension(0, 0); } else { float imageRatio = (float)drawable.getIntrinsicWidth() / drawable.getIntrinsicHeight(); float viewRatio = (float)MeasureSpec.getSize(widthMeasureSpec) / MeasureSpec.getSize(heightMeasureSpec); // Image is wider than the display (ratio) if (imageRatio >= viewRatio) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = (int) (width / imageRatio); setMeasuredDimension(width, height); } // Image is taller than the display (ratio) else { int height = MeasureSpec.getSize(heightMeasureSpec); int width = (int)(height * imageRatio); setMeasuredDimension(width, height); } } } catch (Exception e) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } }
==