ImageView的属性android:scaleType

来源:互联网 发布:linux系统改编码 编辑:程序博客网 时间:2024/05/24 06:54
本文转自:http://juliaailse.iteye.com/blog/1409317

1 imageView.setScaleType(ImageView.ScaleType.FIT_XY );

android:scaleType可控制图片的缩放方式,示例代码如下:
   <ImageView android:id="@+id/img" 
    android:src="@drawable/logo"
    android:scaleType="centerInside"
    android:layout_width="60dip"
    android:layout_height="60dip"
    android:layout_centerVertical="true"/>
 
  说明:centerInside表示按比例缩放图片,使得图片长 (宽)的小于等于视图的相应维度。
  注意:控制的图片为资源而不是背景,即android:src="@drawable/logo",而非android:background="@drawable/logo",我就笨笨地犯了这个低级错误,导致错怪人家scaleType不起作用。程序中动态加载图片也类似,如:应该imgView.setImageResource(R.drawable.*); 而非imgView.setBackgroundResource(R.drawable.*);
 
  
XML属性

android:adjustViewBounds 是否保持宽高比。需要与maxWidth、MaxHeight一起使用,单独使用没有效果。

android:cropToPadding 是否截取指定区域用空白代替。单独设置无效果,需要与scrollY一起使用 

android:maxHeight 定义View的最大高度,需要与AdjustViewBounds一起使用,单独使用没有效果。如果想设置图片固定大小,又想保持图片宽高比,需要如下设置:
1) 设置AdjustViewBounds为true;
2) 设置maxWidth、MaxHeight;
3) 设置设置layout_width和layout_height为wrap_content。

android:maxWidth 设置View的最大宽度。

android:scaleType 设置图片的填充方式。

android:src 设置View的图片或颜色

android:tint 将图片渲染成指定的颜色。

复制代码
 1  这里我们重点理解ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)。android:scaleType是控制图片如何resized/moved来匹对ImageView的size。ImageView.ScaleType / android:scaleType值的意义区别:
2
3 CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
4
5 CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)
6
7 CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
8
9 FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示
10
11 FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置
12
13 FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置
14
15 FIT_XY / fitXY 把图片按比例扩大/缩小到View的大小显示
16
17 MATRIX / matrix 用矩阵来绘制
复制代码


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

复制代码
 1 //获得Bitmap的高和宽 
2 int bmpWidth=bmp.getWidth();
3 int bmpHeight=bmp.getHeight();
4
5 //设置缩小比例
6 double scale=0.8;
7 //计算出这次要缩小的比例
8 scaleWidth=(float)(scaleWidth*scale);
9 scaleHeight=(float)(scaleHeight*scale);
10
11 //产生resize后的Bitmap对象
12 Matrix matrix=new Matrix();
13 matrix.postScale(scaleWidth, scaleHeight);
14 Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true);
复制代码

 

关于Android中ImageView的外观,即图片在其内显示出的样子,与布局文件中adjustViewBonds和scaleType
属性的关系。我进行了一些探索。现跟大家共享,欢迎各位指教。分别将adjustViewBonds设为true和false,与各种scaleType搭配,产生了不同效果。(上面的ImagView的adjstViewBonds值为false;下面的ImagView的adjstViewBonds值为true;两个ImagView大小相同)如下:

代码:

Xml代码  收藏代码
  1. <ImageView  
  2.         android:id="@+id/imageView1"  
  3.         android:layout_width="fill_parent"  
  4.         android:layout_height="200dip"  
  5.         android:adjustViewBounds="false"  
  6.         android:scaleType="centerInside"//此处每次更改  
  7.         android:src="@drawable/ic_3" />//此处两幅图间更改,一副图的大小较小,另一幅的较大。  
  8.   
  9.     <ImageView  
  10.         android:id="@+id/imageView2"  
  11.         android:layout_width="fill_parent"  
  12.         android:layout_height="200dip"  
  13.         android:adjustViewBounds="true"  
  14.         android:scaleType="centerInside"//此处每次更改  
  15.         android:src="@drawable/ic_3" />//此处两幅图间更改,一副图的大小较小,另一幅的较大。  

 原图:



  

1、scaleType=“matrix”
如图pic1、pic2.
是保持原图大小、从左上角的点开始,以矩阵形式绘图。


 

pic1
 

pic2
 
2、scaleType=“fitXY”
如图pic3、pic4.
是将原图进行横方向(即XY方向)的拉伸后绘制的。


pic3
 

pic4
 
3、scaleType=“fitStart”
如图pic5、pic6。
是将原图沿左上角的点(即matrix方式绘图开始的点),按比例缩放原图绘制而成的。


pic5
 

pic6
 
4、scaleType=“fitCenter”
如图pic7、pic8。
是将原图沿上方居中的点(即matrix方式绘图第一行的居中的点),按比例缩放原图绘制而成的。


pic7
 

pic8
 
5、scaleType=“fitEnd”
如图pic9、pic10。、
是将原图沿下方居中的点(即matrix方式绘图最后一行的居中的点),按比例缩放原图绘制而成的。


pic9
 

pic10
 
6、scaleType=“Center”
如图pic11、pic12。
是保持原图大小,以原图的几何中心点和ImagView的几何中心点为基准,只绘制ImagView大小的图像。


pic11
 
 pic12
 
7、scaleType=“centerCrop”
如图pic13、pic14。
不保持原图大小,以原图的几何中心点和ImagView的几何中心点为基准,只绘制ImagView大小的图像(以填满
ImagView为目标,对原图进行裁剪)。


pic13
 

pic14
 
8、scaleType=“centerInside”
如图pic15、pic16.
不保持原图大小,以原图的几何中心点和ImagView的几何中心点为基准,只绘制ImagView大小的图像(以显示
完整图片为目标,对原图进行缩放)。


pic15
 

pic16

      (事实证明,adjustViewBonds单独设置无影响。)

      依本人之见,scaletype的种类分为三类matrix(默认)、fit-X类、和center类。matrix就不多说。fit-X类中,
fitStart、fitCenter和fitEnd之间的都是根据需要使原图改变对ImgView进行适应,按matrix进行绘制,但它们
的区别在于基准不同。fitStart的基准为最上角的点(即matrix方式开始的点)fitCenter的基准点为中间的点
(matrix方式中可以使图片居中的点),而fitEnd的基准点为右下角的点(即matrix方式最后绘制点)。center类
中,center、centerCrop、centerInside都是以原图的几何中心点和ImagView的几何中心点为基准,且只绘制
ImagView大小的图像,不同的是是否保持原图大小和绘图的目标不同、采取的手段不同。


0 0
原创粉丝点击