欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Android ImageView scaleType使用

Android ImageView scaleType使用

2025/2/2 18:09:08 来源:https://blog.csdn.net/zyy_give/article/details/142859550  浏览:    关键词:Android ImageView scaleType使用

目录

一、src设置图片资源

二、scaleType设置图片缩放类型

三、scaleType具体表现

matrix: 

fitXY:

fitStart:

fitCenter: 

fitEnd:

Center:

centerCrop:

centerInside:

控制ImageView和图片的大小保持一致

maxHeight最大高度         

maxWidth最大宽度

adjustViewBounds调整View的界限

四、自定义imageview


一、src设置图片资源

在drawable文件夹中导入图片资源

二、scaleType设置图片缩放类型

通过上面的图片可以看到,我导入的图片并没有占满整个ImageView控件,上下都有空白。这时可以通过scaleType来控制图片的缩放。

查看scaleType的源码,可以看到scaleType有很多值。

<attr name="scaleType"><!-- matrix:不改变原图大小,将图片放在ImageView的左上角 --><enum name="matrix" value="0" /><!-- fitXY 不按比例缩放图片,使得图片填充整个 ImageView,可能会导致图片拉伸变形 --><enum name="fitXY" value="1" /><!-- fitStart:保持图片的宽高比不变,直到较长的边与ImageView控件的边长相等,缩放完成后将图片放置于ImageView的左上角--><enum name="fitStart" value="2" /><!-- fitCenter:按比例缩放图片,使得图片完全显示在 ImageView 中,且居中显示,可能会留有空白 --><enum name="fitCenter" value="3" /><!-- fitEnd:按比例缩放图片,使得图片完全显示在 ImageView 中,且靠右下角显示,可能会留有空白 --><enum name="fitEnd" value="4" /><!-- center:将图片居中显示,不进行缩放。不改变原图大小。如果原图小于ImageView的大小,则保持原图大小,显示在ImageView的中心,当原图大于ImageView的大小时,只保留原图片中间的部分,其他部分裁剪掉 --><enum name="center" value="5" /><!--centerCrop:保持图片宽高比不变,缩放图片,直到完全覆盖ImageView,图片要在ImageView中居中。可能会出现图片显示不完整 --><enum name="centerCrop" value="6" /><!-- centerInside:按比例缩放图片,使得整个图片完全显示在 ImageView 中,可能会留有空白 --><enum name="centerInside" value="7" />
</attr>

三、scaleType具体表现

现在准备两张图片,RC.jpg(图片比ImageView大很多),RC2.jpg(图片比ImageView小) 

matrix: 

fitXY:

fitXY会改变原图片的宽高比,然后通过缩放使整个图片都显示在ImageView中

fitStart:

fitCenter: 

fitEnd:

Center:

当我使用RC.jpg图片时,由于该图片很大,所以ImageView只会显示原图片中间大小为200dp*200dp(也就是ImageView的大小)的范围,也就是图中红色框的部分,其余部分全部裁剪掉。

最终显示的效果如下图:

但是如果我们使用RC2.jpg图片,由于该图片比ImageView小,所以会把RC2.jpg整个图片放在中间的位置,如下图

Center的特点:不改变图片的大小,按照原图片的大小显示在ImageView中间,但会将超出的部分裁剪

centerCrop:

通俗的讲就是以ImageView的宽高比为依据,在图片中间部分按照该比例取最大限度的范围,然后缩放显示在ImageView中。

比如我ImageView的大小设置的是200dp*200dp,也就是1:1大小,那么就在原图片中间部分1:1比例取一个最大的范围,然后缩小(因为我RC.jpg图片很大所以就是缩小,如果使用RC2.jpg那就是放大)显示在ImageView中

                                

centerInside:

如果图片比ImageView大,那就缩小到把整个图片都放到ImageView中,此时类似于fitCenter

如果图片比ImageView小,那就直接将图片原大小放置在ImageView中间,此时类似于Center

控制ImageView和图片的大小保持一致

maxHeight最大高度         

maxWidth最大宽度

adjustViewBounds调整View的界限

通过使用maxWidth和maxHeight来控制图片的最大宽度和最大高度,其中adjustViewBounds的值要设置为true才会生效。

当图片大于设置的maxWidth,maxHeight时,根据小的值(maxWidth为200dp,maxHeight为300dp,maxWidth小,所以以宽200dp为依据保持原图比例不变)来等比例缩小。

当图片的大小小于设置的maxWidth,maxHeight时,ImageView的大小就是原图片的大小。

四、自定义imageview

需求:把图片按照宽高、比例扩大,直到铺满手机屏幕宽度,高度按照原图片之前的比例扩大显示,如果刚刚好,不用做任何处理。

  <com.widget.CustomFullImageViewandroid:id="@+id/iv_desc_icon"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginTop="10dp"android:src="@drawable/test_icon" />
public class CustomFullImageView extends androidx.appcompat.widget.AppCompatImageView {public CustomFullImageView(Context context) {super(context);}public CustomFullImageView(Context context, AttributeSet attrs) {super(context, attrs);}public CustomFullImageView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {Drawable drawable = getDrawable();if (drawable != null) {int width = MeasureSpec.getSize(widthMeasureSpec);int imageWidth = drawable.getIntrinsicWidth();int imageHeight = drawable.getIntrinsicHeight();if (imageWidth > 0 && imageHeight > 0) {float scale = (float) width / imageWidth;// 计算按比例扩大后的高度int newHeight = (int) (imageHeight * scale);// 设置测量后的宽高setMeasuredDimension(width, newHeight);} else {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}} else {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com