【Android】自定义ImageView高度自适应,宽度成比例缩放

来源:互联网 发布:mac加密文件夹弹出 编辑:程序博客网 时间:2024/04/27 21:28
/** * 高度自适应ImageView,高度始终充满显示区域,宽度成比例缩放 */public class AutoHeightImageView extends ImageView {    public AutoHeightImageView(Context context) {        super(context);    }    public AutoHeightImageView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public AutoHeightImageView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        Drawable drawable = getDrawable();            if(drawable != null){                int width = drawable.getMinimumWidth();                int height = drawable.getMinimumHeight();                float scale = (float)width/height;                //强制根据图片原有比例,重新计算ImageView显示区域宽度                int heightMeasure = MeasureSpec.getSize(heightMeasureSpec);                int widthMeasure = (int)(heightMeasure * scale);                //并设置为MeasureSpec.EXACTLY精确模式保证之后的super.onMeasure()不再调整                widthMeasureSpec = MeasureSpec.makeMeasureSpec(widthMeasure, MeasureSpec.EXACTLY);            }            super.onMeasure(widthMeasureSpec, heightMeasureSpec);    }}

相反地,如果是宽度自适应,高度成比例缩放的话,使用以下代码:

/** * 宽度自适应ImageView,宽度始终充满显示区域,高度成比例缩放 */public class AutoScaleWidthImageView extends ImageView {    public AutoScaleWidthImageView (Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {         Drawable drawable = getDrawable();         if(drawable != null){             int width = drawable.getMinimumWidth();             int height = drawable.getMinimumHeight();             float scale = (float)height/width;             int widthMeasure = MeasureSpec.getSize(widthMeasureSpec);             int heightMeasure = (int)(widthMeasure*scale);             heightMeasureSpec =  MeasureSpec.makeMeasureSpec(heightMeasure, MeasureSpec.EXACTLY);         }        super.onMeasure(widthMeasureSpec, heightMeasureSpec);    }}
阅读全文
1 0
原创粉丝点击