Android ImageView设置长度高度为wrap_content时高度根据图片比例自适应

本文介绍了一种在Android中实现ImageView按图片原始比例缩放的方法,并推荐使用adjustViewBounds属性来简化这一过程。

实现方法很简单,根据图片文件的宽度与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" />


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值