ImageView 的 scaleType 属性

本文详细解析了ImageView中的scaleType属性及其8种实现方式:fitCenter、fitStart、fitEnd、fitXY、center、centerCrop、centerInside、matrix。通过实例和图片对比,直观展示了不同scaleType的效果,并提供了在线程中设置ImageView图片的方法,以及可能出现的异常处理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用ImageView时,常常会用到:

ImageView的属性android:scaleType,即 ImageView.setScaleType(ImageView.ScaleType.fitCenter) 

<ImageView
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:scaleType="fitCenter"
    android:src="@drawable/a1" />

scaleType有8个属性,分别是:fitCenter、fitStart、fitEnd、fitXY、center、centerCrop、centerInside、matrix

它们的区别在于:

fitCenter:ImageView的默认状态,把图片按比例扩大/缩小居中完整显示在ImageView中。
fitStart:把图片按比例扩大/缩小到View的宽度,完整显示在View的上部分位置
fitEnd: 把图片按比例扩大/缩小到View的宽度,完整显示在View的下部分位置
fitXY: 把图片不按比例扩大/缩小到View的大小,完整显示,并填满View
center:按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
centerCrop:按比例扩大/缩小图片的size居中显示,使得图片的高等于View的高,使得图片宽等于或大于View的宽
centerInside:将图片的内容完整居中显示,将size大于ImageView的图片进行等比例缩小,小于ImageView的图片不变,直接居中显示。
matrix:根据一个3x3的矩阵对其中图片进行缩放(从左上角起始的矩阵区域)

有图有真相:


                    图1: 原图比ImageView大                                                              图二:原图比ImageView小

=====================================================================================================

ps:一开始我不明白MATRIX矩阵,网上搜索后发现原来MATRIX矩阵可以动态缩小放大图片来显示,这里不展开深入的了解,只是贴出相关语句,缩小图片:

//获得Bitmap的高和宽 
int bmpWidth=bmp.getWidth(); 
int bmpHeight=bmp.getHeight(); 
 
//设置缩小比例 
double scale=0.8; 
//计算出这次要缩小的比例 
scaleWidth=(float)(scaleWidth*scale); 
scaleHeight=(float)(scaleHeight*scale); 
 
//产生resize后的Bitmap对象 
Matrix matrix=new Matrix(); 
matrix.postScale(scaleWidth, scaleHeight); 
Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true);

用到ImageView控件的,可以来参考一下

在线程中如何设置imageview的图片?

可以用setImageBitmap(Bitmap)、setImageDrawable(Drawable)、setImageResource(R.drawable.xxx)、setImageURI(Uri)。

其中第一个和第二个用Bitmap时要小心那个OOM异常。setImageURI(Uri)也是令人头疼,同一个Uri,但图像内容变了,有时居然还是显示前一个的。

image.setImageResource(R.drawable.xxx);

或者是

image.setImageDrawable(getResources().getDrawable(R.drawable.xxx);


欢迎交流 http://blog.youkuaiyun.com/ycwol/article/details/39271183

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值