ImageView
一、XML
图片显示方式scaleType
1、默认显示:fixCenter(固定中心)
这是ScaleType的默认属性,表示居中,适应宽高按原比例放缩。
android:scaleType="fixCenter"
2、center(中心)
表示居中,原尺寸,超出部分裁剪。
android:scaleType="center"
3、fitXY(固定XY轴)
延XY轴方向放缩,填充整个组件。
android:scaleType="fitXY"
4、centerCrop(固定XY轴)
表示居中,原比例放大到填充整个组件,超出部分裁剪。
android:scaleType="centerCrop"
5、matrix(矩阵)
原图放置左上角,超出部分裁剪。
用Matrix对ImageView作放大和缩小的效果时,ImageView的ScaleType必须设置为matrix
android:scaleType="matrix"
6、fitEnd(固定结尾)
原图按比例放缩到宽度,显示在下方的位置。
android:scaleType="fitEnd"
7、fitStart(固定开头)
原图按比例放缩到宽度,显示在上方的位置。
android:scaleType="fitStart"
8、centerInside(固定内部)
表示居中,适应宽高按原比例缩小。和fixCenter相似,但是它只缩小不放大。
android:scaleType="centerInside"
9、固定一个高度或者宽度,组件按图片比例调整宽度或者高度
因为组件要按照图片的比例进行调整大小,所以组件必须有一边是固定长度,否则无效。
android:layout_width="100dp"
android:layout_height="80dp"
//固定宽度,按照图片比例调整组件高度
android:layout_width="100dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
//固定高度,按照图片比例调整宽度
android:layout_width="wrap_content"
android:layout_height="80dp"
android:adjustViewBounds="true"
二、CODE
上述XML实现的效果
均可以通过代码实现。另外可实现动态变化的效果。
设置颜色过滤器
1、颜色过滤器
过滤掉图片的RGB值,用所设置颜色代替。
//原图
//设置红色过滤
image_12.setColorFilter(Color.RED);
//设置绿色过滤
image_23.setColorFilter(Color.GREEN);
//原图
//设置红色过滤
image_12.setColorFilter(Color.RED);
//设置绿色过滤
image_23.setColorFilter(Color.GREEN);
2、色彩矩阵颜色过滤器
矩阵内取值在0.0F至2.0F之间,运算公式如下
ColorMatrix colorMatrix = new ColorMatrix(new float[]{
1, 0, 0, 0, 0, // 红色向量
0, 1, 0, 0, 0, // 绿色向量
0, 0, 1, 0, 0, // 蓝色向量
0, 0, 0, 1, 0, // 透明度向量
});
image_31.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
ColorMatrix colorMatrix = new ColorMatrix(new float[]{
1, 0, 1, 0, 0, // 红色向量
0, 1, 1, 0, 0, // 绿色向量
0, 0, 1, 0, 0, // 蓝色向量
0, 0, 0, 1, 0, // 透明度向量
});
image_32.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
ColorMatrix colorMatrix = new ColorMatrix(new float[]{
1, 0, 0, 1, 0, // 红色向量
0, 1, 0, 1, 0, // 绿色向量
0, 0, 1, 1, 0, // 蓝色向量
0, 0, 0, 1, 0, // 透明度向量
});
image_33.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
3、光照颜色过滤器
//原图
//LightingColorFilter (int mul, int add)
//mul色彩倍增 将绿色位置设置为00,意思为红色颜色位置倍增0倍,去除掉红色
image_42.setColorFilter(new LightingColorFilter(0xFFFF00FF, 0x00000000));
//add 色彩添加 将红色设置为FF,意思为红色颜色位置增加FF,
image_43.setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x00FF0000));
4、混合模式
这个和PS里面的混合模式的算法是相同的。有相关需求的话可以去了解。
//原图
// 设置颜色过滤
image_52.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.DARKEN));
// 设置颜色过滤
image_53.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN));