一、概述
图片多的页面,经常会听见UI说,你写的UI变形了。图片拉伸、变形也是开发有时会遇到的问题。
二、先看一下缩放的效果图
效果图.jpg
测试图片的宽高尺寸:840 * 420,也就是 2:1,宽是高的2倍。
三、缩放的需求分析
1. 按宽或者高来缩放
2. 缩放的倍数或者说比例
四、自定义属性
五、控件的宽高是在onMeasure指定的,先分析一下有多少种情况
1. 明确的指定了宽高
2. 按宽度来缩放
3. 按高度缩放
/**
* 测量控件的代码
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// 不设置任何属性
if (mScaleType == 0 || mScaleRadio == 0) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
return;
}
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
// 如果子类设置了精确的宽高
if (widthMode == MeasureSpec.EXACTLY && heightMode == MeasureSpec.EXACTLY
&& (widthSize != 0 && heightSize != 0)) {
setMeasuredDimension(widthSize, heightSize);
return;
}
// 如果是按宽度来缩放
if (mScaleType == WIDTH && widthMode == MeasureSpec.EXACT