ImageView的属性android:scaleType,即 ImageView.setScaleType(ImageView.ScaleType)
属性如下:
CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截 取图片的居中部分显示
CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长 (宽)等于或大于View的长(宽)
CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小 或原来的size使得图片长/宽等于或小于View的长/宽
FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示
FIT_END / fitEnd 把 图片按比例扩大/缩小到View的宽度,显示在View的下部分位置
FIT_START / fitStart 把 图片按比例扩大/缩小到View的宽度,显示在View的上部分位置
FIT_XY / fitXY 把图片 不按比例 扩大/缩小到View的大小显示
MATRIX / matrix 用矩阵来绘制
ImageView.ScaleType设置图解
android:adjustViewBounds
是否保持宽高比。需要与maxWidth、MaxHeight一起使用,否则单独使用没有效果。
android:cropToPadding
是否截取指定区域用空白代替。单独设置无效果,需要与scrollY一起使用。
android:src对应的方法为setImageResource(R.drawable.xxx),而不是setBackgroundResource(R.drawable.txxx)
关于ImageView和level-list一起使用以显示不同的图片
有时候,我们为了在一个ImageView中显示不同的图片,往往会使用:
- if (条件1){
- image.setBackground(R.id.xxx1);
- }else if (条件2){
- image.setBackground(R.id.xxx2);
- }
其实可以用level-list实现相同的功能。
首先,在res/drawable下建立一个xml文件,内容如下:
- <level-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:maxLevel="0" android:drawable="@drawable/battery_0" />
- <item android:maxLevel="1" android:drawable="@drawable/battery_1" />
- <item android:maxLevel="2" android:drawable="@drawable/battery_2" />
- <item android:maxLevel="3" android:drawable="@drawable/battery_3" />
- <item android:maxLevel="4" android:drawable="@drawable/battery_4" />
- </level-list>
然后在layout中把ImageView的src设置成已创建好的xml文件。
程序中变换图片时,只需要使用:
- imageview.getDrawable().setImageLevel(1);
Android会根据level的值自动选择对应的图片。手机显示剩余电量就是用这个方法来显示不同图片的。
让帧动画在结束时消失
在帧动画结束的时候,如何让他消失呢?android提供了击中巧妙的方法:
一般使用帧动画的过程如下:
- ImageView iv = (ImageView)findViewById(R.id.iv);
- iv.setBackGroundDrawable(R.id.frametest);
- AnimationDrawable ad = (AnimationDrawable)iv.getBackGroundDrawabe();
- ad.start();
上面的代码在帧动画结束的时候会保持帧动画的最后一帧。如何让他在结束的时候消失呢?
当然可以写Listener来监听帧动画的结束事件了。不过这种实现方式不准确。
其实只需要在animation-list中最后增加一个item
- <?xml version="1.0" encoding="utf-8"?>
- <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="true">
- <item android:drawable="@drawable/d1" android:duration="100" />
- <item android:drawable="@drawable/d2" android:duration="100" />
- <item android:drawable="@drawable/d3" android:duration="100" />
- <item android:drawable="@drawable/d4" android:duration="100" />
- <item android:drawable="@drawable/d5" android:duration="100" />
- <item android:drawable="@drawable/d6" android:duration="100" />
- <item android:drawable="@android:id/empty" android:duration="100" />
- </animation-list>
@android:id/empty 将ImageView的BackGroundResource 的id 设置为空就ok了。