实现方法很简单,根据图片文件的宽度与ImageView的宽度比例关系算出ImageView的高度
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.NinePatchDrawable;
import android.util.AttributeSet;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
/**
* 按比例缩放
* @author yjm
* 2014年10月20日
*/
public class AdaptiveImageView extends ImageView {
// 控件默认长、宽
private int defaultWidth = 0;
private int defaultHeight = 0;
// 比例
private float scale = 0;
public AdaptiveImageView(Context context) {
super(context);
}
public AdaptiveImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AdaptiveImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@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;
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();
}
scale = (float) defaultWidth / (float) bitmap.getWidth();
defaultHeight = Math.round(bitmap.getHeight() * scale);
LayoutParams params = this.getLayoutParams();
params.width = defaultWidth;
params.height = defaultHeight;
this.setLayoutParams(params);
super.onDraw(canvas);
}
}
图片要足够大
-------------------------------------------------------------------------------------------------华丽的一条大线---------------------------------------------------------------------------------------------
以上一个方法都是我年少,不懂事想出来的,经过一段摸索我找到了解决这个问题的正确方法就是设置ImageView的adjustViewBounds属性就好了,具体查阅adjustViewBounds的用法
<ImageView
android:id="@+id/img_1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="centerInside"
android:src="@drawable/img_bg" />