View -- Paint

整理精简, 学习自定义view中paint的使用方法

  • 颜色
  • 效果

颜色

基本颜色绘制

  • setColor(int color)
  • setARGB(int a, int r, int g, int b)
  • setShaper() 着色器
Shaper
线性渐变
LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile) 
    - x0/y0 x1/y1 起始端点和结束端点
    - color0/color1 两个端点的颜色
    - Shader.TileMode 
        CLAMP  端点之外延续端点处的颜色
        MIRROR 镜像模式  
        REPEAT 重复模式
辐射渐变
RadialGradient(float centerX, float centerY, float radius, int centerColor, int edgeColor, TileMode tileMode)
    - radius 半径
    - Shader.TileMode 
        CLAMP  端点之外延续端点处的颜色
        MIRROR 镜像模式  
        REPEAT 重复模式
扫描渐变
SweepGradient(float cx, float cy, int color0, int color1)
    - cx/cy 扫描的中心坐标
用bitmap(图片)来着色
BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY)
ComposeShader 混合着色器
ComposeShader(Shader shaderA, Shader shaderB, PorterDuff.Mode mode)
    - PorterDuff.Mode 共17种模式, 此处不细表

设置颜色过滤

  • LightingColorFilter(int mul, int add)
  • PorterDuffColorFilter(int color, PorterDuff.Mode mode)
  • ColorMatrixColorFilter()

绘制与目标源的重叠显示 Transfer mode

setXfermode(Xfermode xfermode)
注意事项

离屏缓冲
Canvas.saveLayer()

View.setLayerType()
     setLayerType() 是直接把整个 View 都绘制在离屏缓冲中 
     setLayerType(LAYER_TYPE_HARDWARE) 是使用 GPU 来缓冲
     setLayerType(LAYER_TYPE_SOFTWARE) 是直接直接用一个 Bitmap 来缓冲。

如果没有特殊需求,可以选用第一种方法 Canvas.saveLayer() 来设置离屏缓冲,以此来获得更高的性能
控制透明区域
绘制对象位置与绘制区域大小

效果

  • 设置抗锯齿 setAntiAlias (boolean aa)
  • 线条图形风格 setStyle(Paint.Style style)
  • 线条形状
    • 宽度 setStrokeWidth(float width)
    • 头部形状 setStrokeCap(Paint.Cap cap)
    • 连接点形状 setStrokeJoin(Paint.Join join)
    • 设置连接点延长线 setStrokeMiter(float miter)
  • 色彩优化
    • 设置图像抖动 setDither(true)
    • 设置双线性过滤 setFilterBitmap(true)
  • 设置图形轮廓 setPathEffect(PathEffect effect)
    • 设置拐角为圆角 CornerPathEffect(float radius) radius 半径
    • 线条随机偏离 DiscretePathEffect(float segmentLength, float deviation)
      • segmentLength 拼接的每个线段的长度
      • deviation 偏离量
    • 画虚线 DashPathEffect(float[] intervals, float phase)
      • intervals 元素必须为偶数
      • phase 偏移量
    • PathDashPathEffect(Path shape, float advance, float phase, PathDashPathEffect.Style style) 用path画虚线
    • SumPathEffect(PathEffect dashEffect, PathEffect discreteEffect) 组合效果类的 PathEffect
    • ComposePathEffect(PathEffect dashEffect, PathEffect discreteEffect) 组合效果类的 PathEffect
  • 在绘制层下方添加阴影 setShadowLayer(float radius, float dx, float dy, int shadowColor)
    • 在硬件加速开启的情况下, setShadowLayer() 只支持文字的绘制,文字之外的绘制必须关闭硬件加速才能正常绘制阴影。
    • 如果 shadowColor 是半透明的,阴影的透明度就使用 shadowColor 自己的透明度;而如果 shadowColor 是不透明的,阴影的透明度就使用 paint 的透明度。
  • 现在绘制层上方添加效果 setMaskFilter
    • BlurMaskFilter(float radius, BlurMaskFilter.Blur style) 模糊
    • EmbossMaskFilter(float[] direction, float ambient, float specular, float blurRadius) 浮雕

DrawText()

初始化类

你可能感兴趣的:(View -- Paint)