为了全面演示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
<activityandroid:name=".ImageViewScaleTypeDemo1"/>
<activityandroid:name=".ImageViewScaleTypeDemo2"/>
<activityandroid:name=".ImageViewScaleTypeDemo3"/>
<activityandroid:name=".ImageViewScaleTypeDemo4"/>
<activityandroid:name=".ImageViewScaleTypeDemo5"/>
<activityandroid:name=".ImageViewScaleTypeDemo6"/>
<activityandroid:name=".ImageViewScaleTypeDemo7"/>
<activityandroid:name=".ImageViewScaleTypeDemo8"/>
(2) res/layout/main.xmlGridView主视图布局
<GridView
android: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视图布局
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
(4) ImageAdapter.java继承BaseAdapter,并载入GridView的图片资源
publicclassImageAdapterextendsBaseAdapter
{
//定义Context
privateContext mContext;
//定义整型数组即图片资源
privateInteger[]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,
};
publicImageAdapter(Context c)
{
mContext= c;
}
//获取图片的个数
publicintgetCount()
{
returnmImageIds.length;
}
//获取图片在库中的位置
publicObject getItem(intposition)
{
returnposition;
}
//获取图片ID
publiclonggetItemId(intposition)
{
returnposition;
}
publicView getView(intposition, View convertView, ViewGroupparent)
{
ImageView imageView;
if(convertView ==null)
{
//给ImageView设置资源
imageView =newImageView(mContext);
//设置布局图片显示
imageView.setLayoutParams(newGridView.LayoutParams(85,85));
//设置显示比例类型
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
}
else
{
imageView = (ImageView) convertView;
}
imageView.setImageResource(mImageIds[position]);
returnimageView;
}
}
(5) MainActivity.java GridView主视图类
publicclassMainActivityextendsActivity {
privateGridViewgridView;
@Override
publicvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gridView=(GridView)findViewById(R.id.gridView);
gridView.setAdapter(newImageAdapter(this));
gridView.setBackgroundResource(R.drawable.image);
gridView.setOnItemClickListener(newAdapterView.OnItemClickListener(){
@Override
publicvoidonItemClick(AdapterView<?>arg0, View arg1,intarg2,
longarg3) {
//TODOAuto-generated method stub
Intent intent=newIntent();
switch(arg2){
//GridView第一个ID,对应CENTER
case0:
intent.setClass(MainActivity.this,ImageViewScaleTypeDemo1.class);
startActivity(intent);
MainActivity.this.finish();
break;
//GridView第二个ID,对应CENTER_CROP
case1:
intent.setClass(MainActivity.this,ImageViewScaleTypeDemo2.class);
startActivity(intent);
MainActivity.this.finish();
break;
case2:
intent.setClass(MainActivity.this,ImageViewScaleTypeDemo3.class);
startActivity(intent);
MainActivity.this.finish();
break;
case3:
intent.setClass(MainActivity.this,ImageViewScaleTypeDemo4.class);
startActivity(intent);
MainActivity.this.finish();
break;
case4:
intent.setClass(MainActivity.this,ImageViewScaleTypeDemo5.class);
startActivity(intent);
MainActivity.this.finish();
break;
case5:
intent.setClass(MainActivity.this,ImageViewScaleTypeDemo6.class);
startActivity(intent);
MainActivity.this.finish();
break;
case6:
intent.setClass(MainActivity.this,ImageViewScaleTypeDemo7.class);
startActivity(intent);
MainActivity.this.finish();
break;
case7:
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,此处略去代码
publicclassImageViewScaleTypeDemo1extendsActivity {
privateImageViewimageView1;
@Override
publicvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.image);
//显示imageView1
imageView1=(ImageView)findViewById(R.id.imageView1);
//设置imageView1背景资源
imageView1.setImageResource(R.drawable.image);
//设置imageView1显示类型为CENTER
imageView1.setScaleType(ImageView.ScaleType.CENTER);
}
@Override
publicbooleanonKeyDown(intkeyCode, KeyEvent event) {
//TODOAuto-generated method stub
//响应返回按键,退出到主界面
if(keyCode==KeyEvent.KEYCODE_BACK){
Intent intent=newIntent();
intent.setClass(ImageViewScaleTypeDemo1.this, MainActivity.class);
startActivity(intent);
ImageViewScaleTypeDemo1.this.finish();
}
returnsuper.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裁剪了图片的中间部分填充屏幕。其它类型可自行查看分析。