ImageView的属性android:scaleType作用

时间:2020-12-27 04:56:09

ImageView的属性android:scaleType作用

    在网上查了好多资料,大致都雷同,大家都是互相抄袭的,看着很费劲,不好理解,自己总结一下,留着需要看的话来查找。

代码中的例子如下:

ImageView的属性android:scaleType作用
<ImageView
android:id="@+id/iv_bit_1"

android:layout_width
="@dimen/passcode_width"
android:layout_height
="@dimen/passcode_height"
android:scaleType
="fitXY" />

<
ImageView
android:id="@+id/iv_bit_2"

android:layout_width
="@dimen/passcode_width"
android:layout_height
="@dimen/passcode_height"
android:scaleType
="fitXY" />

<
ImageView
android:id="@+id/iv_bit_3"

android:layout_width
="@dimen/passcode_width"
android:layout_height
="@dimen/passcode_height"
android:scaleType
="fitXY" />

<
ImageView
android:id="@+id/iv_bit_4"

android:layout_width
="@dimen/passcode_width"
android:layout_height
="@dimen/passcode_height"
android:scaleType
="fitXY" />

<
ImageView
android:id="@+id/iv_bit_5"

android:layout_width
="@dimen/passcode_width"
android:layout_height
="@dimen/passcode_height"
android:scaleType
="fitXY" />

<
ImageView
android:id="@+id/iv_bit_6"

android:layout_width
="@dimen/passcode_width"
android:layout_height
="@dimen/passcode_height"
android:scaleType
="fitXY" />
ImageView的属性android:scaleType作用

      通过API的查询得知,

  ImageView.ScaleType的结构为:

继承关系

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

 类概述

将图片边界缩放,以适应视图边界时的可选项。

常量

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"。

此间通过阅读网友的一篇日志,对此也有更详细的解释,大家可以参考:

http://blog.sina.com.cn/s/blog_407abb0d0100mao1.html

用代码展示着几个属性的效果,效果截图:

主界面:

ImageView的属性android:scaleType作用

CENTER效果:

ImageView的属性android:scaleType作用

CENTER_CROP效果:

ImageView的属性android:scaleType作用

CENTER_INSIDE效果:

ImageView的属性android:scaleType作用

FIT_CENTER效果:

ImageView的属性android:scaleType作用

FIT_START效果:

ImageView的属性android:scaleType作用

FIT_END效果:

ImageView的属性android:scaleType作用

FIT_XY效果:

ImageView的属性android:scaleType作用

MATRIX效果:

ImageView的属性android:scaleType作用

结果分析:

我选取的原始图片明显标志如下:左上角有蝴蝶、花朵,右下角为一个蝗虫,且图片像素大于 320×480,各种类型的差异通过查看图片的明显标志即可窥见一斑。比如FIT_START,填充于屏幕上方,并等比例缩放;相反,FIT_END置于屏幕下方,而FIT_CENTER则在中间。CENTER_CROP裁剪了图片的中间部分填充屏幕。其它类型可自行查看分析。

——————————————————————————————————————————————————————————————

imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

 

ImageView.ScaleType共八种:

1·ImageView.ScaleType.center:图片位于视图中间,但不执行缩放。

2·ImageView.ScaleType.CENTER_CROP 按统一比例缩放图片(保持图片的尺寸比例)便于图片的两维(宽度和高度)等于或者大于相应的视图的维度

3·ImageView.ScaleType.CENTER_INSIDE按统一比例缩放图片(保持图片的尺寸比例)便于图片的两维(宽度和高度)等于或者小于相应的视图的维度

4·ImageView.ScaleType.FIT_CENTER缩放图片使用center

5·ImageView.ScaleType.FIT_END缩放图片使用END

6·ImageView.ScaleType.FIT_START缩放图片使用START

7·ImageView.ScaleType.FIT_XY缩放图片使用XY

8·ImageView.ScaleType.MATRIX当绘制时使用图片矩阵缩放

 

公共方法

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.ScaleType

 

public 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

<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.xml GridView主视图布局

  <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的图片资源

public class ImageAdapter extends BaseAdapter

{

    // 定义Context

    private 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;

    }

 

 

    // 获取图片ID

    public 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;

    }

 

}