HenCoder Android view 1-2

作者: sinyu 分类: Android,学习笔记,总结与反思 发布时间: 2018-06-10 14:38

Paint 的 API 大致可以分为 4 类:

  • 颜色
  • 效果
  • drawText() 相关
  • 初始化

 

1.1 基本颜色

 

1.1.1 直接设置颜色

1.1.1.1 setColor(int color)

1.1.1.2 setARGB(int a, int r, int g, int b)

1.1.2 setShader(Shader shader) 设置 Shader

除了直接设置颜色, Paint 还可以使用 Shader 。

Shader
这个英文单词很多人没有见过,它的中文叫做「着色器」,也是用于设置绘制颜色的。「着色器」不是 Android
独有的,它是图形领域里一个通用的概念,它和直接设置颜色的区别是,着色器设置的是一个颜色方案,或者说是一套着色规则。当设置了 Shader 之后,Paint 在绘制图形和文字时就不使用 setColor/ARGB() 设置的颜色了,而是使用 Shader 的方案中的颜色。

在 Android
的绘制里使用 Shader ,并不直接用 Shader 这个类,而是用它的几个子类。具体来讲有 LinearGradient RadialGradient SweepGradient BitmapShader ComposeShader 这么几个:

1.1.2.1 LinearGradient 线性渐变

tile:端点范围之外的着色规则,类型是 TileMode。TileMode 一共有 3 个值可选: CLAMP, MIRROR 和 REPEAT。CLAMP (夹子模式???算了这个词我不会翻)会在端点之外延续端点处的颜色;MIRROR 是镜像模式;REPEAT 是重复模式。具体的看一下例子就明白。

1.1.2.2 RadialGradient 辐射渐变

1.1.2.3 SweepGradient 扫描渐变

1.1.2.4 BitmapShader

Canvas.drawBitmap()效果相同

1.1.2.5 ComposeShader 混合着色器

所谓混合,就是把两个 Shader 一起使用。

mode: 两个 Shader 的叠加模式,即 shaderA 和 shaderB 应该怎样共同绘制。它的类型是 PorterDuff.Mode。

1.2
setColorFilter(ColorFilter colorFilter)

为绘制设置颜色过滤。颜色过滤的意思,就是为绘制的内容设置一个统一的过滤策略,然后 Canvas.drawXXX() 方法会对每个像素都进行过滤后再绘制出来。

 

在 Paint 里设置 ColorFilter ,使用的是 Paint.setColorFilter(ColorFilter
filter) 方法。 ColorFilter 并不直接使用,而是使用它的子类。它共有三个子类:LightingColorFilter PorterDuffColorFilter 和 ColorMatrixColorFilter。

 

1.2.1
LightingColorFilter

模拟简单的光照效果。

 

1.2.2
PorterDuffColorFilter

使用一个指定的颜色和一种指定的 PorterDuff.Mode 来与绘制对象进行合成。

 

1.2.3
ColorMatrixColorFilter

ColorMatrixColorFilter 使用一个 ColorMatrix 来对颜色进行处理

可以使用这个库:StyleImageView

 

1.3
setXfermode(Xfermode xfermode)

 “Transfer
mode”,Xfermode 指的是你要绘制的内容和 Canvas 的目标位置的内容应该怎样结合计算出最终的颜色。但通俗地说,其实就是要你以绘制的内容作为源图像,以 View
中已有的内容作为目标图像,选取一个 PorterDuff.Mode 作为绘制内容的颜色处理方案。

2 效果

2.1 setAntiAlias
(boolean aa) 设置抗锯齿

2.2
setStyle(Paint.Style style)设置填充效果

2.3 线条形状

2.3.1
setStrokeWidth(float width)宽度

2.3.2
setStrokeCap(Paint.Cap cap)线头形状

2.3.3
setStrokeJoin(Paint.Join join)拐角形状

2.3.4
setStrokeMiter(float miter)拐角补偿

2.4 色彩优化

2.4.1
setDither(boolean dither)图像抖动

2.4.2
setFilterBitmap(boolean filter)双线性过滤

2.5
setPathEffect(PathEffect effect)

使用 PathEffect 来给图形的轮廓设置效果。

2.5.1
CornerPathEffect拐角变圆

2.5.2
DiscretePathEffect随机偏离

ja PathEffect E

2.5.3
DashPathEffect虚线

2.5.4
PathDashPathEffect

使用一个 Path 来绘制「虚线」

2.5.5
SumPathEffect组合

2.5.6
ComposePathEffect组合

2.6
setShadowLayer(float radius, float dx, float dy, int shadowColor)

在之后的绘制内容下面加一层阴影。

 

2.7
setMaskFilter(MaskFilter maskfilter)

2.7.1
BlurMaskFilter模糊效果

 

2.7.2
EmbossMaskFilter浮雕效果

2.8 获取绘制的 Path

2.8.1
getFillPath(Path src, Path dst)

2.8.2
getTextPath(String text, int start, int end, float x, float y, Path path) /
getTextPath(char[] text, int index, int count, float x, float y, Path path)

3 drawText() 相关

4 初始化类

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注