【Android】自定义ImageView高度自适应,宽度成比例缩放
16lz
2021-01-23
/** * 高度自适应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); }}
更多相关文章
- android图片缩放(指定大小) drawable获取图片后怎么设置图片大小
- Android 对一个View进行缩放处理(放大或缩小View)案例
- Android缩放drawable
- iPhone、Android 社交 App 使用比例大調查(資訊圖表)
- Android之UI学习篇六:ImageView实现图片旋转和缩放
- Android中获取文本宽度和高度