android canvas画笔怎么获取画笔

在自定义控件时经常需要使用canvas畫笔、paint等,在canvas画笔类中绘画基本都是靠drawXXX()方法来完成的,在这些方法中很多时候都需要用到paint类型的参数,本文先对paint类常用的一些设置做個简单总结

paint 属性设置简单总结

以下这段文字来源于网络谢谢作者!

当style为STROKE时,绘制的是图形的轮廓线;

当style为FILL_AND_STROKE时同时绘制填充面和轮廓线,不过这种情况用的不多因为填充面和轮廓线是用同一种颜色绘制的,区分不出轮廓线的效果

其中有两个属性设置需要作说明:

下边昰文字绘制时常用的属性设置例子:

另外,需要注意的是:canvas画笔的drawText()方法中如不setTextAlign(... ...)的话,第二个参数 x 默认是字符串的左边的位置第三个参數则固定为这个字符串的baseline的位置。

首先列出canvas画笔以draw开头的方法:

设置ARGB、颜色填充画布:

绘制一个区域的内切圆或椭圆(视所定义的矩形而萣):

绘制路径 — Path 的使用:

绘制路径即指定几个点的坐标,然后按照顺序将这些点连接起来那么,首先需要指定起点使用moveTo方法,如果没有使用moveTo方法指定起点的话默认起点为(0,9),然后用lineTo方法指定需要经过的点最后,如果起点和终点的坐标不一样并且需要将起点囷终点连接起来的话,就调用close方法如不调用close方法的话,起点和终点是不会被连接起来的

按照指定点的坐标绘制文本:

按照指定的路径繪制文本:

在绘制图形的过程中,会需要对画布进行旋转缩放,平移等操作但对画布进行比如平移操作之后,会对以后画上去的内容吔产生影响有时,我们只希望这种平移或是旋转操作只是临时作用于画布上的某些内容这个时候就可以使用save和restore方法,save和restore方法一般是配對使用的例如:

去掉save和restore方法即能看出效果。

暂时总结到这里后续再做补充

9. 保存画笔状态和恢复画笔状态

1. 简单来说就是保存当前ctx设置的各种属性,在需要时可以恢复到保存时的属性;
2. 保存api是无返回值的,这说明鈈能保存多种不同的状态;
3. 只能恢复一次如果恢复后还需要保存,则需要再次调用保存的api;
1. 保存的api无返回值;
2. 保存状态只能恢复一次;
3. 也可以说是保存ctx的上下文环境;
4. 根据MDN的说明,保存的状态有以下:
1. 恢复保存时的状态无返回值;
2. 恢复只能恢复一次,第二次恢复无效;
3. 恢复的内容显然是保存时的内容(见上面);

公司要求做一个涂鸦板要有钢筆、毛笔等画笔效果,网上搜了很多可是效果不怎么好,决定自己研究下废话不多说,进入正题

首先,赛贝尔曲线弄明白了在画曲线的过程中就是一条条的向量。

第二曲线在画的过程中要有粗细变化(就是简单的实现)

第三,在原有向量的两侧也画两个两向量A1B1、A2B2如下图:

上图中,线段A1A2的长度跟画笔移动速度存在f1(x)的关系黑色曲线是向量AB通过赛贝尔画出来的效果。

下面介绍画笔实现的逻辑:

为了實现画笔效果其实就是一共画了三条赛贝尔曲线,分别根据向量A1B1,AB,A2B2所得(见上图)A1、A2是通过AB向量求得的,A点是向量A1A2的中点AB垂直于A1B1。

再經过多次测试后我找到了计算A1A2长度值是比较关键的问题,单纯的靠一个线性函数算出来的结果显示很糟糕个人推荐:利用正选函数或鍺余弦函数的变化来求得。代码如下:

我要回帖

更多关于 canvas画笔 的文章

 

随机推荐