Android 2.2 r1 API中文文档——
ImageView.ScaleType小易2010-11-3结构继承关系public static final enum ImageView.ScaleType extends Enum<E extends Enum<E>>java.lang.Object↳ java.lang.Enum<E extends java.lang.Enum<E>>↳ android.widget.ImageView.ScaleType类概述:缩放图片的边界用于视图边界的选取设定。枚举值ImageView.ScaleTypeCENTER图片位于视图中间,但不执行缩放比例ImageView.ScaleTypeCENTER_CROP按比例统一缩放图片(保持图片的尺寸比例)便于图片的两维(宽度和高度)等于或大于相应的视图维度ImageView.ScaleTypeCENTER_INSIDE按比例统一缩放图片(保持图片的尺寸比例)便于图片的两维(宽度和高度)等于或小于相应的视图维度ImageView.ScaleTypeFIT_CENTER缩放图片使用CENTERImageView.ScaleTypeFIT_END缩放图片使用ENDImageView.ScaleTypeFIT_START缩放图片使用STARTImageView.ScaleTypeFIT_XY缩放图片使用FILL.ImageView.ScaleTypeMATRIX当绘制时使用图片矩阵缩放公共方法static ImageView.ScaleType valueOf(String name)final static ScaleType[] values()枚举值public static final ImageView.ScaleType CENTER图片位于视图中间,但不执行缩放比例。在XML中,使用语法:android:scaleType="center"public static final ImageView.ScaleType CENTER_CROP按比例统一缩放图片(保持图片的尺寸比例)便于图片的两维(宽度和高度)等于或大于相应的视图维度。然后图片居中于视图。在XML中,使用语法:android:scaleType="centerCrop"public static final ImageView.ScaleType CENTER_INSIDE按比例统一缩放图片(保持图片的尺寸比例)便于图片的两维(宽度和高度)等于或小于相应的视图维度。然后图片居中于视图。在XML中,使用语法:android:scaleType="centerInside"public static final ImageView.ScaleType FIT_CENTER缩放图片使用CENTER。在XML中,使用语法:android:scaleType="fitCenter"public static final ImageView.ScaleType FIT_END缩放图片使用END。在XML中,使用语法:android:scaleType="fitEnd"public static final ImageView.ScaleType FIT_START缩放图片使用START。在XML中,使用语法:android:scaleType="fitStart"public static final ImageView.ScaleType FIT_XY缩放图片使用FILL. 。在XML中,使用语法:android:scaleType="fitXY"public static final ImageView.ScaleType MATRIX当绘制时使用图片矩阵缩放。图片矩阵可以使用setImageMatrix(Matrix)进行设定。在XML中,使用语法:android:scaleType="matrix"公共方法public static ImageView.ScaleType valueOf (String name)参数String name(名字)返回值ImageView.ScaleTypepublic static final ScaleType[] values ()参数NULL返回值ScaleType[]示例代码:为了全面演示ImageView.ScaleType的八种类型即CENTER,CENTER_CROP,CENTER_INSIDE,FIT_CENTER,FIT_START,FIT_END,FIT_XY,MATRIX,我在这里通过一个GridView进行显示,可通过点击每一种类型的ImageButton进行详细查看、比较。背景图片为一个像素宽度(443px)×高度(500px),大于默认的Android模拟器320×480,这样可以清晰的看出ImageView是否做了比例缩放,及所处位置的差异。(1) AndroidManifest.xml 添加各种ScaleType的Activity<activity android:name=".ImageViewScaleTypeDemo1" /><activity android:name=".ImageViewScaleTypeDemo2" /><activity android:name=".ImageViewScaleTypeDemo3" /><activity android:name=".ImageViewScaleTypeDemo4" /><activity android:name=".ImageViewScaleTypeDemo5" /><activity android:name=".ImageViewScaleTypeDemo6" /><activity android:name=".ImageViewScaleTypeDemo7" /><activity android:name=".ImageViewScaleTypeDemo8" />(2) res/layout/main.xml GridView主视图布局<GridViewandroid:id="@+id/gridView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:numColumns="auto_fit"android:verticalSpacing="10dp"android:horizontalSpacing="10dp"android:columnWidth="90dp"android:stretchMode="columnWidth"android:gravity="center"/>(3) res/layout/image.xml ScaleType视图布局<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=""android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><ImageViewandroid:id="@+id/imageView1"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>(4) ImageAdapter.java 继承BaseAdapter,并载入GridView的图片资源public class ImageAdapter extends BaseAdapter{ // 定义Contextprivate Context mContext;// 定义整型数组 即图片资源private Integer[] mImageIds ={ R.drawable.center,R.drawable.centercrop,R.drawable.centerinside,R.drawable.fitcenter,R.drawable.fitstart,R.drawable.fitend,R.drawable.fitxy,R.drawable.matrix,};public ImageAdapter(Context c){ mContext = c;}// 获取图片的个数public int getCount(){ return mImageIds.length;}// 获取图片在库中的位置public Object getItem(int position){ return position;}// 获取图片IDpublic long getItemId(int position){ return position;}public View getView(int position, View convertView, ViewGroup parent){ ImageView imageView;if (convertView == null){ // 给ImageView设置资源imageView = new ImageView(mContext);// 设置布局 图片显示imageView.setLayoutParams(new GridView.LayoutParams(85, 85));// 设置显示比例类型imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);}else{ imageView = (ImageView) convertView;}imageView.setImageResource(mImageIds[position]);return imageView;}}(5) MainActivity.java GridView主视图类public class MainActivity extends Activity { private GridView gridView;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(R.layout.main);gridView=(GridView)findViewById(R.id.gridView);gridView.setAdapter(new ImageAdapter(this));gridView.setBackgroundResource(R.drawable.image);gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { // TODO Auto-generated method stubIntent intent=new Intent();switch(arg2){ //GridView第一个ID,对应CENTERcase 0:intent.setClass(MainActivity.this, ImageViewScaleTypeDemo1.class);startActivity(intent);MainActivity.this.finish();break;//GridView第二个ID,对应CENTER_CROPcase 1:intent.setClass(MainActivity.this, ImageViewScaleTypeDemo2.class);startActivity(intent);MainActivity.this.finish();break;case 2:intent.setClass(MainActivity.this,ImageViewScaleTypeDemo3.class);startActivity(intent);MainActivity.this.finish();break;case 3:intent.setClass(MainActivity.this, ImageViewScaleTypeDemo4.class);startActivity(intent);MainActivity.this.finish();break;case 4:intent.setClass(MainActivity.this, ImageViewScaleTypeDemo5.class);startActivity(intent);MainActivity.this.finish();break;case 5:intent.setClass(MainActivity.this, ImageViewScaleTypeDemo6.class);startActivity(intent);MainActivity.this.finish();break;case 6:intent.setClass(MainActivity.this, ImageViewScaleTypeDemo7.class);startActivity(intent);MainActivity.this.finish();break;case 7:intent.setClass(MainActivity.this, ImageViewScaleTypeDemo8.class);startActivity(intent);MainActivity.this.finish();break;}}});}}(6) ImageViewScaleTypeDemo1.java 显示imageView1显示类型为CENTER,其它ImageViewScaleTypeDemo2-8分别为CENTER_CROP,CENTER_INSIDE,FIT_CENTER,FIT_START,FIT_END,FIT_XY,MATRIX,此处略去代码public class ImageViewScaleTypeDemo1 extends Activity { private ImageView imageView1;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(R.layout.image);//显示imageView1imageView1=(ImageView)findViewById(R.id.imageView1);//设置imageView1背景资源imageView1.setImageResource(R.drawable.image);//设置imageView1显示类型为CENTERimageView1.setScaleType(ImageView.ScaleType.CENTER);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub//响应返回按键,退出到主界面if(keyCode==KeyEvent.KEYCODE_BACK){ Intent intent=new Intent();intent.setClass(ImageViewScaleTypeDemo1.this, MainActivity.class);startActivity(intent);ImageViewScaleTypeDemo1.this.finish();}return super.onKeyDown(keyCode, event);}}(7) 效果截图:主界面: CENTER效果:CENTER_CROP效果:CENTER_INSIDE效果:FIT_CENTER效果:FIT_START效果:FIT_END效果:FIT_XY效果:MATRIX效果:(8) 结果分析:我选取的原始图片明显标志如下:左上角有蝴蝶、花朵,右下角为一个蝗虫,且图片像素大于 320×480,各种类型的差异通过查看图片的明显标志即可窥见一斑。比如FIT_START,填充于屏幕上方,并等比例缩放;相反,FIT_END置于屏幕下方,而FIT_CENTER则在中间。CENTER_CROP裁剪了图片的中间部分填充屏幕。其它类型可自行查看分析。