Paint类继承关系
:
Paint类说明
:
配合Canvas类使用的一个类,用来给Canva将要绘制的图形添加一些属性,例如:抗锯齿(AntiAlias)、透明度(Alpha)等。故Paint类大多数常用的方法都是 set 系列的方法。
Paint类常用方法
:
set系列方法: AntiAlias(抗锯齿) TextSize(字体大小) Typeface(字体)
TextAlign(文字排列方式)
StrokeWidth(线条宽度) Color(颜色) Alpha(透明度) ColorFilter(颜色滤镜)
Style(风格(填充/描边)) ShadowLayer(阴影) Shader(BitmapShader图形渲染器) Xfermode(混合模式)
get系列方法: TextBouds(获取文字的绘制范围)
Paint类方法详细说明
:
1. setAntiAlias():boolean类型,true设置图形绘制抗锯齿,false取消抗锯齿。
抗锯齿
(英语:
anti-aliasing
,简称
AA
),也译为
抗锯齿
或边
缘柔化、消除混叠、抗图像折叠有损等。它是一种消除显示器输出的画面中图物边缘出现凹凸锯齿的技术,那些凹凸的锯齿通常因为高分辨率的信号以低分辨率表示或无法准确运算出3D图形坐标定位时所导致的图形混叠
(aliasing)而产生的,反锯齿技术能有效地解决这些问题。
2. setTextSize(): float类型,单位为px,用来设置字体大小。
3. setTypeface():Typeface类型,Typeface类中提供了一些常量供使用,用来设置字体样式。
字体类型:TYPEFACE.DEFAULT----常规字体类型
TYPEFACE.DEFAULT_BOLD----黑体字体类型
TYPEFACE.MONOSPACE----等宽字体类型
TYPEFACE.SANS_SERIF----sans serif字体类型
TYPEFACE.SERIF----serif字体类型
字体风格: Typeface.BOLD----粗体
Typeface.BOLD_ITALIC----粗斜体
Typeface.ITALIC----斜体
Typeface.NORMAL----常规
字体风格的设置有三种方式:
1. Typeface font = Typeface.create(
TYPEFACE.SANS_SERIF, Typeface.BOLD
); // sans serif字体,粗体----调用setTypeface()传入就行
2. mPaint.setFakeBoldText(true); //true为粗体,false为非粗体
mPaint.setTextSkewX(-0.5f); //float类型参数,负数表示右斜,整数左斜
mPaint.setUnderlineText(true); //true为下划线,false为非下划线
mPaint.setStrikeThruText(true); //true为删除线,false为非删除线
mPaint.setTextSkewX(-0.5f); //float类型参数,负数表示右斜,整数左斜
mPaint.setUnderlineText(true); //true为下划线,false为非下划线
mPaint.setStrikeThruText(true); //true为删除线,false为非删除线
3. mPaint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); // 只能给默认(常规)字体设置字体风格
4. setTextAlign():Align类型,Align是Paint类中定义的一个枚举,共有三种。
1. Paint.Align.LEFT ---- 水平居左
2. Paint.Align.CENTER ---- 水平居中
3. Paint.Align.RIGHT ---- 水平居右
5. setStrokeWidth():float类型,单位是px,用来设置画图线条的宽度。
6. setColor():int类型,使用Color类赋值,给画笔设置绘图颜色。
Color.BLACK // 黑色
Color.BLUE // 蓝色
......
如果不使用系统定义的颜色可以使用 Color.parseColor("#ffffff")--RGB颜色。
使用Color.argb(int alpha, int r, int g, int b);可以设置ARGB颜色。
7. setAlpha():int类型,0~255之间,设置透明度,255表示不透明,0表示完全透明。
8. setColorFilter():给图形设置一个滤镜,共有三种滤镜。(这一部分 是参考 他人的博客。)
1. ColorMatrixColorFilter(色彩矩阵颜色过滤器):
色彩矩阵:色彩矩阵是Android用一个矩阵来处理ARGB颜色的,这个矩阵是一个4X5的矩阵。
第一行表示红色(R)向量,第二行表示绿色(G)向量,第三行表示蓝色(B)向量,最后一行表示是透明度(A)向量,每一行的最后一列表示与标准白色的偏移量(简单来说就是想让色彩趋于红色就增大红色的偏移量,趋于蓝色则增大蓝色的偏移量)。这个矩阵中的值的范围是(0~2f),1表示和原图一致,趋于0表示减弱某种色彩,趋于2表示增加某种色彩。
色彩矩阵的使用方法:
此时图片不会发生变化,因为每个颜色的值都是1,即与原图一致。
修改这个值就会产生想要的效果。
色彩矩阵改变颜色的计算方法:
这里MyColor的RGBA值我们需要转换为[0, 1](与255进行比较)。
改变这些值相对应的值就可以出现不同的滤镜效果。
2.
LightingColorFilter(光照颜色过滤器):
只有一个构造方法: LightingColorFliter(int mul, int add); 两个参数全是16进制的数,0x00000000,每两位分表带别ARGB。它的改变法则是原图的RGB * mul + add 就变成了新的RGB,整个计算过程中,Alpha不参与运算。
当参数是(0xffffffff, 0x00000000)时,原图不变。
第一个参数mul表示 色彩倍增。 改变某一个数,则改变图中的相应颜色。(如去掉绿色,0xffff00ff)
第二个参数add表示 色彩添加。 增加某种颜色,则改变对应的值即可。(增加红色,0x00ff0000)
可以用在改变图片颜色时使用(如,点击改变按钮颜色,用此方法就可以不使用两张图片来完成)
3. PorterDuffColorFilter:
同样只有一个构造方法:PorterDuffColorFilter(int color, PorterDuff.Mode mode);
第一个参数是颜色值,第二个参数是混合模式的类型。
此过滤器产生作用的方法是:原图为底部图层,添加的颜色值为顶部图层,用相应的混合模式进行混合。
9. setStyle(): Style类型参数,style是Paint类定义的一个枚举,共三种。
Paint.Style.FILL:填充内部
Paint.Style.STROKE:仅描边
Paint.Style.FILL_AND_STROKE:填充内部并描边
10. setShadowLayer(float radius, float dx, float dy, int color):
第一个参数:阴影部分的倾斜度
第二个参数:阴影部分的水平偏移量
第三个参数:阴影部分的数值偏移量
第四个参数:阴影的颜色
11. setShader(): Shader类及其子类型,设置渲染器。图形渲染器详细使用说明见Shader类日志。
12. setXferMode():设置混合模式类型。 使用方法:mPaint.setXferMode(new PorterDuffXferMode(PorterDuff.Mode.XXXX));
13. getTextBounds():获取文字绘制区域(rect)。
有两个重载的方法:
第一个: getTextBounds(char[] chars, int start, int end, Rect rect);
第一个参数:将要绘制的字符数组。
第二、三个参数:绘制数组中从start开始到end结束。
第四个参数: 绘制区域(这个方法是要获取绘制区域的,所以此处给一个空的参数,这个方法运行结束后会给此参数赋上值,值就是绘制区域rect)
第二个: gettextBounds(String str, int start, int end, Rect rect);
第一个参数: 将要绘制的字符串。
其他基本类似。