Android Canvas类和Paint类(草稿版)

Canvas对象中可以绘制:

复制代码

1)  drawArc():绘制圆弧;
2)  drawBitmap():绘制Bitmap图像;
3)  drawCircle():绘制圆圈;
4)  drawLine():绘制线条;
5)  drawOval():绘制椭圆;
6)  drawPath():绘制Path路径;
7)  drawPicture():绘制Picture图片;
8)  drawRect():绘制矩形;
9)  drawRoundRect():绘制圆角矩形;
10) drawText():绘制文本;
11) drawVertices():绘制顶点。

复制代码

  Canvas对象的其他方法:

1)  canvas.save():把当前绘制的图像保存起来,让后续的操作相当于是在一个新图层上绘制;
2)  canvas.restore():把当前画布调整到上一个save()之前的状态;
3)  canvas.translate(dx, dy):把当前画布的原点移到(dx, dy)点,后续操作都以(dx, dy)点作为参照;
4)  canvas.scale(x, y):将当前画布在水平方向上缩放x倍,竖直方向上缩放y倍;
5)  canvas.rotate(angle):将当前画布顺时针旋转angle度。

Paint类中有如下方法:

  1、图形绘制:

1)  setArgb(int a, int r, int g, int b):设置绘制的颜色,a表示透明度,r、g、b表示颜色值;
2)  setAlpha(int a):设置绘制的图形的透明度;
3)  setColor(int color):设置绘制的颜色;
4)  setAntiAlias(boolean a):设置是否使用抗锯齿功能,抗锯齿功能会消耗较大资源,绘制图形的速度会减慢;
5)  setDither(boolean b):设置是否使用图像抖动处理,会使图像颜色更加平滑饱满,更加清晰;
6)  setFileterBitmap(Boolean b):设置是否在动画中滤掉Bitmap的优化,可以加快显示速度;
7)  setMaskFilter(MaskFilter mf):设置MaskFilter来实现滤镜的效果;
8)  setColorFilter(ColorFilter cf):设置颜色过滤器,可以在绘制颜色时实现不同颜色的变换效果;
9)  setPathEffect(PathEffect pe):设置绘制的路径的效果;
10) setShader(Shader s):设置Shader绘制各种渐变效果;
11) setShadowLayer(float r, int x, int y, int c):在图形下面设置阴影层,r为阴影角度,x和y为阴影在x轴和y轴上的距离,c为阴影的颜色;
12) setStyle(Paint.Style s):设置画笔的样式:FILL实心;STROKE空心;FILL_OR_STROKE同时实心与空心;
13) setStrokeCap(Paint.Cap c):当设置画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式;
14) setStrokeJoin(Paint.Join j):设置绘制时各图形的结合方式;
15) setStrokeWidth(float w):当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度;
16) setXfermode(Xfermode m):设置图形重叠时的处理方式;

2、文本绘制:

1)  setTextAlign(Path.Align a):设置绘制的文本的对齐方式;
2)  setTextScaleX(float s):设置文本在X轴的缩放比例,可以实现文字的拉伸效果;
3)  setTextSize(float s):设置字号;
4)  setTextSkewX(float s):设置斜体文字,s是文字倾斜度;
5)  setTypeFace(TypeFace tf):设置字体风格,包括粗体、斜体等;
6)  setUnderlineText(boolean b):设置绘制的文本是否带有下划线效果;
7)  setStrikeThruText(boolean b):设置绘制的文本是否带有删除线效果;
8)  setFakeBoldText(boolean b):模拟实现粗体文字,如果设置在小字体上效果会非常差;
9)  setSubpixelText(boolean b):如果设置为true则有助于文本在LCD屏幕上显示效果;

3、其他方法:

1)  getTextBounds(String t, int s, int e, Rect b):将页面中t文本从s下标开始到e下标结束的所有字符所占的区域宽高封装到b这个矩形中;
2)  clearShadowLayer():清除阴影层;
3)  measureText(String t, int s, int e):返回t文本中从s下标开始到e下标结束的所有字符所占的宽度;
4)  reset():重置画笔为默认值。

这里需要就几个方法解释一下:

1、setPathEffect(PathEffect pe):设置绘制的路径的效果:

  常见的有以下几种可选方案:

复制代码

1)  CornerPathEffect:可以用圆角来代替尖锐的角;
2)  DathPathEffect:虚线,由短线和点组成;
3)  DiscretePathEffect:荆棘状的线条;
4)  PathDashPathEffect:定义一种新的形状并将其作为原始路径的轮廓标记;
5)  SumPathEffect:在一条路径中顺序添加参数中的效果;
6)  ComposePathEffect:将两种效果组合起来,先使用第一种效果,在此基础上应用第二种效果。

复制代码

2、setXfermode(Xfermode m):设置图形重叠时的处理方式:

  关于Xfermode的多种效果,我们可以参考下面一张图:

  在使用的时候,我们需要通过paint. setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XXX))来设置,XXX是上图中的某种模式对应的常量参数,如DST_OUT。

  这16中情况的具体解释如下:

复制代码

1.PorterDuff.Mode.CLEAR:所绘制不会提交到画布上。
2.PorterDuff.Mode.SRC:显示上层绘制图片
3.PorterDuff.Mode.DST:显示下层绘制图片
4.PorterDuff.Mode.SRC_OVER:正常绘制显示,上下层绘制叠盖。
5.PorterDuff.Mode.DST_OVER:上下层都显示。下层居上显示。
6.PorterDuff.Mode.SRC_IN:取两层绘制交集。显示上层。
7.PorterDuff.Mode.DST_IN:取两层绘制交集。显示下层。
8.PorterDuff.Mode.SRC_OUT:上层绘制非交集部分。
9.PorterDuff.Mode.DST_OUT:取下层绘制非交集部分。
10.PorterDuff.Mode.SRC_ATOP:取下层非交集部分与上层交集部分
11.PorterDuff.Mode.DST_ATOP:取上层非交集部分与下层交集部分
12.PorterDuff.Mode.XOR:异或:去除两图层交集部分
13.PorterDuff.Mode.DARKEN:取两图层全部区域,交集部分颜色加深
14.PorterDuff.Mode.LIGHTEN:取两图层全部,点亮交集部分颜色
15.PorterDuff.Mode.MULTIPLY:取两图层交集部分叠加后颜色
16.PorterDuff.Mode.SCREEN:取两图层全部区域,交集部分变为透明色

 参考

https://www.cnblogs.com/itgungnir/p/6217447.html

猜你喜欢

转载自blog.csdn.net/yh18668197127/article/details/85002060
今日推荐