1. src和background的区别:
background: 根据ImageView组件给定的长宽进行拉伸,使其充满组件的宽高;
src:设置的是原图的大小,不会进行拉伸;
background设置的是ImageView的背景,显示在后边;
src是图片内容,显示在前面的;因此background和src是可以同时使用的
scaleType
首先必须清楚scaleType的进行缩放针对的src属性,不是background属性
scaleType的常用参数:
center
按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
centerCrop
按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)
fitEnd
把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置
fitStart
把图片按比例 扩大/缩小 到View的宽度,显示在View的上部分位置
fitXY
把图片不按比例 扩大/缩小 到View的大小显示
matrix
用矩阵来绘制
centerInside
将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
fitCenter
把图片按比例扩大/缩小到View的宽度,居中显示
2. Android 获取ImageView图片显示区域的宽高
重写activity的 onWindowFocusChanged 方法,因为该方法回调的时候窗口已经绘制完成。在该方法里获取图片的宽高
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
//获取图片的大小
int imgViewW = img.getDrawable().getBounds().width();
int imgViewH = img.getDrawable().getBounds().height();
//获得ImageView中Image的真实宽高,
int imgViewWidth = img.getWidth();
int imgViewHeight = img.getHeight();
//获得ImageView中Image的变换矩阵
Matrix m = img.getImageMatrix();
float[] values = new float[10];
m.getValues(values);
//Image在绘制过程中的变换矩阵,从中获得x和y方向的缩放系数
float sx = values[0];
float sy = values[4];
//计算Image在屏幕上实际绘制的宽高
int actualImgWidth = (int)(imgViewW * sx);
int actualImgHeight = (int)(imgViewH * sy);
imgLeftUp = new Point();
imgRightDown = new Point();
imgLeftUp.x = (imgViewWidth - actualImgWidth) / 2;
imgLeftUp.y = (imgViewHeight - actualImgHeight) / 2;
imgRightDown.x = imgLeftUp.x + actualImgWidth;
imgRightDown.y = imgLeftUp.y + actualImgHeight;
}
3. 动态设置图片颜色
imgView.getBackground().mutate().setColorFilter(0xff007aff, PorterDuff.Mode.SRC_IN);