Paint译为画笔,顾名思义,可以使用paint在canvas上画东西。本篇文章主要讲解Paint的一些常用API
1、paint.setColor(Color.RED); // 设置画笔颜色
2、paint.setARGB(a, r, g, b); // 设置画笔颜色,范围 0 - 255
3、paint.setAlpha(alpha); // 设置画笔透明度,范围 0 - 255
4、paint.setAntiAlias(true); // 抗锯齿
抗锯齿默认是关闭的,如果需要抗锯齿,需要显式地打开。另外,除了 setAntiAlias(aa) 方法,打开抗锯齿还有一个更方便的方式:构造方法。创建 Paint 对象的时候,构造方法的参数里加一个 ANTI_ALIAS_FLAG的 flag,就可以在初始化的时候就开启抗锯齿。
5、paint.setStyle(Paint.Style.FILL); //描边效果
6、paint.setStrokeWidth(4);//描边宽度
7、paint.setStrokeCap(Paint.Cap.ROUND); //圆角效果
设置线头的形状。线头形状有三种:BUTT 平头、ROUND 圆头、SQUARE 方头。默认为 BUTT。
8、paint.setStrokeJoin(Paint.Join.MITER);//拐角风格
设置拐角的形状。有三个值可以选择:MITER 尖角、 BEVEL 平角和 ROUND 圆角。默认为 MITER。
/**
* (x0,y0):渐变起始点坐标 ,;(x1,y1):渐变结束点坐标
* colors: 渐变数组
* positions: 位置数组,position的取值范围[0,1],作用是指定某个位置的颜色值,如果传null,渐变就线性变化。
* tileMode: 用于指定控件区域大于指定的渐变区域时,空白区域的颜色填充方法
*/
new LinearGradient(x0, y0, x1, y1, new int[]{Color.RED, Color.BLUE, Color.GREEN}, new float[]{0.f,0.7f,1}, Shader.TileMode.CLAMP) ;
/**
* centerX ,centerY:shader的中心坐标,开始渐变的坐标
* radius: 渐变的半径
* colors: 渐变颜色数组
* stoops: 渐变位置数组,类似扫描渐变的positions数组,取值[0,1],中心点为0,半径到达位置为1.0f
* tileMode: shader未覆盖以外的填充模式
*/
new RadialGradient(centerX, centerY, radius, new int[]{Color.GREEN, Color.YELLOW, Color.RED}, null, Shader.TileMode.CLAMP);
/**
* cx,cy: 渐变中心坐标
* colors,positions:类似LinearGradient,用于多颜色渐变,positions为null时,根据颜色线性渐变
*/
new SweepGradient(cx, cy, Color.RED, Color.GREEN);
/**
* tileX:X轴方向的TileMode
* tileY: Y轴方向的TileMode
REPEAT, 绘制区域超过渲染区域的部分,重复排版
CLAMP, 绘制区域超过渲染区域的部分,会以最后一个像素拉伸排版
MIRROR, 绘制区域超过渲染区域的部分,镜像翻转排版
*/
new BitmapShader(mBitmap, Shader.TileMode.REPEAT, Shader.TileMode.MIRROR);
/**
* shaderA,shaderB: 要混合的两种shader
* PorterDuff.Mode mode: 组合两种shader颜色的模式
*/
new ComposeShader(bitmapShader, linearGradient, PorterDuff.Mode.MULTIPLY);
9、paint.setShader(new SweepGradient(200, 200, Color.BLUE, Color.RED)); //设置环形渲染器
10、paint.setFilterBitmap(true); //设置双线性过滤
图像在放大绘制的时候,默认使用的是最近邻插值过滤,这种算法简单,但会出现马赛克现象;而如果开启了双线性过滤,就可以让结果图像显得更加平滑
/**
* radius: 模糊的范围
* style: 模糊的类型
* NORMAL: 内外都模糊绘制
* SOLID: 内部正常绘制,外部模糊
* INNER: 内部模糊,外部不绘制
* OUTER: 内部不绘制,外部模糊(什么鬼?)
*/
new BlurMaskFilter(50, BlurMaskFilter.Blur.NORMAL)
/*** direction 是一个 3 个元素的数组,指定了光源的方向;
* ambient 是环境光的强度,数值范围是 0 到 1;
* specular 是炫光的系数;
* blurRadius 是应用光线的范围*/
new EmbossMaskFilter(float[] direction, float ambient, float specular, float blurRadius )
11、paint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL));//设置画笔遮罩滤镜 ,传入度数和样式
12、paint.setTextScaleX(2);// 设置文本缩放倍数
13、paint.setTextSize(38);// 设置字体大小
14、paint.setTextAlign(Paint.Align.LEFT);//对其方式
15、paint.setUnderlineText(true);// 设置下划线