美文网首页
Android Paint 你完全都了解了吗(一)

Android Paint 你完全都了解了吗(一)

作者: Endless_123 | 来源:发表于2019-04-16 15:31 被阅读0次

    1、颜色

    1.1、基本颜色

    像素的基本颜色根据绘制的内容不同而有不同的方式:Canvas的颜色填充方法canvas.drawColor/drawRGB/drawdrawARGB()
    颜色直接写入方法中进行设置背景;canvas.drawBitmap()的颜色直接由Bitmap对象提供;绘制图形与文字的颜色则需要设置Paint。进入正题Pain设置颜色的方法分为两种:

    1.1.1、直接设置颜色
    • paint.setColor(int color) 或者 paint.setARGB();
            Paint paint = new Paint();
            paint.setColor(Color.RED);
            paint.setARGB();
            canvas.drawRect(0, 0, 100, 100, paint);
    
    rect.png
    1.1.2 设置 Shader来实现着色方案

    Android 通过Paint设置 setShader可以达到很多绚丽的效果。
    Shader有LinearGradient、RadialGradient、SweepGradient、BitmapShader、ComposeShader 这五个子类分别代表了不同的着色规则,下面来一一说明:

    • LinearGradient 线性渐变 设置两个点和两种颜色以点为端点,使用两种颜色渐变绘制
            Shader shader = new LinearGradient(30, 30, 150, 150,
                    Color.RED, Color.BLUE, Shader.TileMode.CLAMP);
            paint.setShader(shader);
            canvas.drawRect(30, 30, 150, 150, paint);
    

    LinearGradient构造方法中最后一个参数为TileMode,TileMode分为三种CLAMP会在端点之外延续端点处的颜色,REPEAT重复模式,MIRROR镜像模式;看下效果:


    shader.jpeg

    ps:设置Shader后setColor所设置的颜色将不会生效。

    • RadialGradient 辐射渐变
      构造方法:
      RadialGradient(float centerX, float centerY, float radius, int centerColor, int edgeColor, TileMode tileMode)。
      参数:
      centerX centerY:辐射中心的坐标
      radius:辐射半径
      centerColor:辐射中心的颜色
      edgeColor:辐射边缘的颜色
      tileMode:辐射范围之外的着色模式。


      RadialGradient.jpeg
    • SweepGradient 扫描渐变
      构造方法:
      SweepGradient(float cx, float cy, int color0, int color1)
      参数:
      cx cy :扫描的中心
      color0:扫描的起始颜色
      color1:扫描的终止颜色


      SweepGradient.jpeg
    • BitmapShader Bitmap着色器
      构造方法:
      BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY)
      参数:
      bitmap:用来做模板的 Bitmap 对象
      tileX:横向的 TileMode
      tileY:纵向的 TileMode。
      TileMode 同以上几种着色器效果相同
    • ComposeShader 混合着色器 将多种着色器合并使用
      构造方法:
      ComposeShader(Shader shaderA, Shader shaderB, PorterDuff.Mode mode)
      参数:
      shaderA, shaderB:两个相继使用的 Shader
      mode: 两个 Shader 的叠加模式。

    PorterDuff.Mode用来指定两个着色器绘制的策略目前一共有17种,大致可以分为2类合成与混合。
    Alpha 合成:


    PorterDuff-Alpha.jpeg

    混合:


    PorterDuff-blend.jpeg
    1.2 ColorFilter 颜色过滤

    通过setColorFilter 进行设置颜色过滤;ColorFilter有三个子类:LightingColorFilter PorterDuffColorFilter 和 ColorMatrixColorFilter。

    • LightingColorFilter 模拟简单光照效果
      构造方法:
      LightingColorFilter(int mul, int add)
      参数:
      int mul:用来和目标像素相乘
      int add:用来和目标像素相加
    R = R * mul.R / 0xff + add.R  
    G = G * mul.G / 0xff + add.G  
    B = B * mul.B / 0xff + add.B  
    
    • PorterDuffColorFilter 作用是使用一个指定的颜色和一种指定的 PorterDuff.Mode 来与绘制对象进行合成
      构造方法:
      PorterDuffColorFilter(int color, PorterDuff.Mode mode)
      参数:
      int color:指定的颜色
      PorterDuff.Mode mode:绘制策略
    • ColorMatrixColorFilter 使用一个 ColorMatrix 来对颜色进行处理
      ColorMatrix:是一个4*5的矩形矩阵,通过计算将像素进行转换。
    1.3 Xfermode

    Xfermode 以绘制的内容作为源图像,以 View 中已有的内容作为目标图像,选取一个 PorterDuff.Mode 作为绘制内容的颜色处理方案。

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); 使用时直接使用Xfermode 的子类PorterDuffXfermode就可以达到我们想要的效果。

    ps:注意其中透明区域的范围

    相关文章

      网友评论

          本文标题:Android Paint 你完全都了解了吗(一)

          本文链接:https://www.haomeiwen.com/subject/pgfpwqtx.html