ImageButton的布局大小默认是按照图片的大小来设定的,比如图片100100,那么布局大小也是100100。
但在实际使用时,图片为了显示较好切得都是高清大一点的图。而大小也不是固定的。有时可能只想要固定一个尺寸,而另一个去自适应。
例如上面100100,我需要高50,则希望高50,而宽会根据高来自适应。再调整图片缩放关系得到一个5050的图片。
于是发生下面的情况:

我的天啦,怎么这么丑。那么多的白的是个什么情况。原来原因是应为ImageButton的布局并不会自动缩放。只能自己去重写ImageButton了。
public class WbImageButton extends ImageButton {
private int mSrcWitdh;
private int mSrcHeight;
private int mExactlyWidth;
private int mEactlyHeight;
public WbImageButton(Context context) {
super(context);
}
public WbImageButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Drawable drawable = getDrawable();
Rect bounds = drawable.getBounds();
mSrcWitdh = bounds.width();
mSrcHeight = bounds.height();
if (mSrcWitdh != 0 && mSrcHeight != 0){
if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY && MeasureSpec.getMode(heightMeasureSpec) != MeasureSpec.EXACTLY){
mExactlyWidth = MeasureSpec.getSize(widthMeasureSpec);
mEactlyHeight = mExactlyWidth * mSrcHeight / mSrcWitdh;
setMeasuredDimension(mExactlyWidth,mEactlyHeight);
}else if (MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.EXACTLY && MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY){
mEactlyHeight = MeasureSpec.getSize(heightMeasureSpec);
mExactlyWidth = mEactlyHeight * mSrcWitdh / mSrcHeight;
setMeasuredDimension(mExactlyWidth,mEactlyHeight);
}
}
}
}
效果如下:

尊重作者,转载请注明出处!
版权申明:本文版权归作者所有,未经授权,任何单位或个人不得以任何形式转载、摘编或利用其它方式使用本博客内容。作者保留追究相关法律责任的权利。如需使用博客内容,请与作者联系获得授权。感谢对本文的尊重与支持。
免责声明:本网站所载内容仅供参考,不构成任何专业建议。用户基于本网站内容作出的决策,风险自担。对于因使用本网站内容而产生的任何直接或间接损失,本网站不承担任何责任。请用户审慎判断,理性使用。