ImageView剖析二—(示例详解ImageView属性的使用)

来源:互联网 发布:淘宝流量充值如何退款 编辑:程序博客网 时间:2024/05/21 07:15

前面我们通过阅读ImageView的源码对ImageView和它的属性有了更深的认识,这一次我们通过实际应用
来进一步理解他们:
首先我们找一张图(两种尺寸750*1334和1242*2208)放到对应(相近)的文件夹下面,mipamap各文件夹对应
的手机分辨率:
ldpi 320*240
mdpi 480*320
hdpi 800*480
xhdpi 1280*720
xxhdpi 1920*1080
xxxhdpi 3840×2160
单独使用src属性:
布局文件(固定宽高,方便我们查看各属性作用)





显示效果:
如图一所示
当我们将固定宽高改成wrapcontent时,显示效果如下:
如图2所示
是不是感觉很奇怪,这并不是我们想要的效果啊?于是我们又去剖析源码:是不是特别辣眼睛,这并不是我们想要的效果啊?于是我们又去剖析源码:
 代码一:
final int index = a.getInt(R.styleable.ImageView_scaleType, -1);
if (index >= 0) {
setScaleType(sScaleTypeArray[index]);
}
代码二:
private void initImageView() {
mMatrix = new Matrix();
mScaleType = ScaleType.FIT_CENTER;
/××省略不相关代码若干/
}
于是我们知道了,当mScaleType属性不设置任何值时,默认为:ScaleType.FIT_CENTER,即按比例进行拉伸,直到视图的某一条边完全重合,并将拉伸后的结果显示在视图中间,这样是不是清楚了。
小结一:src属性只是提供了资源图片的id,并不会对图片的显示效果产生任何影响。
maxWidth和maxHeight属性:
布局文件不变:







注意设置:adjustViewBounds = “true”;
显示效果如下:
是不是又很奇怪,一点作用没起?于是我们再去看源码:
* An optional argument to supply a maximum width for this view. Only valid if
* {@link #setAdjustViewBounds(boolean)} has been set to true. To set an image to be a maximum
* of 100 x 100 while preserving the original aspect ratio,
do the following: 1) set * adjustViewBounds to true 2) set maxWidth and maxHeight to 100 3) set the height and width * layout params to WRAP_CONTENT.
* Note that this view could be still smaller than 100 x 100 using this approach if the original
* image is small. To set an image to a fixed size, specify that size in the layout params and
* then use {@link #setScaleType(android.widget.ImageView.ScaleType)} to determine how to fit
* the image within the bounds.
@android.view.RemotableViewMethod
public void setMaxWidth(int maxWidth) {
mMaxWidth = maxWidth;
}
注意源码中标粗的位置:给一张Image设置maxWidth和maxHeight须做以下三步:1)设置adjustViewBounds为true,2)设置 maxHeight和maxWidth的值,3)设置height和width的参数为WRAP_CONTENT于是,我们将width和height的值改为WRAP_CONTENT,显示效果如下:
如图4所示
这样就达到了我们想要的效果(默认缩放形式,可使用scaleType设置自己想要的缩放形式)
小结二:maxHeight和maxWidth属性只有在adjustViewBounds为true,width和height值为WRAP_CONTENT时起作用,并且它仍有可能小于设置的值,内部已默认的形式进行缩放,可以根据具体情况,设置自己的缩放形式。

scaleType属性:
1)只设置scaleType属性,不设置adjustViewBounds属性(默认为false)
布局文件:





设置scaleType为center:不缩放,截取中间部分显示,如下图所示:
图5所示
设置scaleType为centerCrop按比例均匀缩放,直至充满视图的宽高,并显示在视图的中间,如下图所示:
图6所示
设置scaleType为centerInside:当View的宽高>=图片的宽高时,图片居中显示原大小反之将原图按比例缩放至View的宽高居中显示,如下图所示:
图7所示
设置scaleType为fitCenter:按比例进行拉伸,直到视图的某一条边完全重合,并将拉伸后的结果显示在视图中间如下图所示:
图8所示
设置scaleType为fitXY:缩放时X和Y互不影响,即不按比例缩放,如下图所示:
图9所示
设置scaleType为fitStart:按原有的纵横比进行拉伸,直到视图的某一条边完全重合,使拉伸结果对其到左部和顶部,如下图所示:
图10所示
设置scaleType为fitEnd:按比例进行拉伸,直到视图的某一条边完全重合,并将拉伸后的结果显示在视图底部,如下图所示:
图11所示
设置scaleType为matrix:绘图时使用图像矩阵缩放,如下图所示:
图12所示
以上就是ImageView的属性使用具体示例。关于tint属性我们后面会单独介绍。

0 0
原创粉丝点击