Shader的介绍

来源:互联网 发布:tfboys三只的关系知乎 编辑:程序博客网 时间:2024/06/18 21:45

Shader着色器,用canvas绘制一个图形后,在这个图形内部进行着色。

例如如果你用带有着色器的画笔去绘制一个圆形,那么这个圆形内部就按照你指定的着色器你渲染色彩,着色器可以是图片,也可以是不同颜色按照梯度规律去变化。

分类

  1. BitmapShader :图片贴图效果
  2. LinearGradient:线性渐变色效果
  3. RadialGradient:环形渐变色效果
  4. SweepGradient:雷达扫描效果
  5. ComposeShader:以上效果的任意组合

基本用法

在onDraw()里写下面的代码

//构建画笔Paint mPaint=new Paint();//构建ShaderSweepGradient mSweepGradient=new SweepGradient(300,300,Color.RED,Color.BLUE);//给Paint设置ShadermPaint.setShader(mSweepGradient2);//使用设置好Shader的Paint去作画canvas.drawCircle(300, 300, 300, mPaint);

或者
通过shapeDrawable也可以实现类似功能

//构建ShaderSweepGradient mSweepGradient=new SweepGradient(300,300,Color.RED,Color.BLUE);//构建ShapeDrawableShapeDrawable shapeDrawble = new ShapeDrawable(new OvalShape());//传入一个形状圆形、矩形、椭圆//给画笔设置ShadershapeDrawble.getPaint().setShader(mShader);//设置图形边界shapeDrawble.setBounds(0,0,mWidth,mWidth);//绘制这个图形shapeDrawble.draw(canvas);

API介绍

BitmapShader:图片贴图效果

 /**    * bitmap 在渲染器内使用的位图    * tileX  The tiling mode for x to draw the bitmap in.   在位图上X方向渲染器平铺模式    * tileY  The tiling mode for y to draw the bitmap in.    在位图上Y方向渲染器平铺模式    * TileMode:    * CLAMP  :如果渲染器超出原始边界范围,会复制范围内边缘染色。    * REPEAT :横向和纵向的重复渲染器图片,平铺。    * MIRROR :横向和纵向的重复渲染器图片,这个和REPEAT重复方式不一样,他是以镜像方式平铺。 */ mShader = new BitmapShader(mBitmap,                Shader.TileMode.CLAMP,                 Shader.TileMode.CLAMP);

LinearGradient:线性渐变色效果

/**    * http://blog.csdn.net/u012702547/article/details/50821044    * x0表示渲染起始位置的x坐标,    * y0表示渲染起始位置的y坐标,    * x1表示渲染结束位置的x坐标,    * 1表示渲染结束位置的y坐标,    * colors表示渲染的颜色,它是一个颜色数组,数组长度必须大于等于2,    * positions表示colors数组中几个颜色的相对位置,是一个float类型的数组,该数组的长度必须与colors数组的长度相同。    * 如果这个参数使用null也可以,这时系统会按照梯度线来均匀分配colors数组中的颜色,    * 最后一个参数则表示平铺方式,有三种,    */ LinearGradient linearGradient = new LinearGradient( 0, 0,800, 800,mColors,  null,  Shader.TileMode.REPEAT);

RadialGradient:环形渐变色效果

    /**    * float x:  圆心X坐标    * float y:  圆心Y坐标    * float radius: 半径    * int[] colors:  渲染颜色数组    * floate[] positions: 相对位置数组,可为null,  若为null,可为null,颜色沿渐变线均匀分布    * Shader.TileMode tile:渲染器平铺模式    */ RadialGradient mRadialGradient1 = new RadialGradient( 300, 300, 100, mColors, null, Shader.TileMode.CLAMP);
    /**    *    *  float x:  圆心X坐标    *  float y:  圆心Y坐标    *  float radius: 半径    *  int color0: 圆心颜色    *  int color1: 圆边缘颜色    *  Shader.TileMode tile:渲染器平铺模式    */        RadialGradient mRadialGradient2 = new RadialGradient(        100, 300, 300, Color.RED, Color.BLUE, Shader.TileMode.CLAMP);

SweepGradient:雷达扫描效果

  /**    *    * cx    渲染中心点x 坐标    * cy    渲染中心y 点坐标    * colors    围绕中心渲染的颜色数组,至少要有两种颜色值    * positions 相对位置的颜色数组,可为null,  若为null,可为null,颜色沿渐变线均匀分布    */        SweepGradient mSweepGradient1=new SweepGradient(        100,300,mColors,null);
  /**    * cx    渲染中心点x 坐标    * cy    渲染中心点y 坐标    * color0    起始渲染颜色    * color1    结束渲染颜色    */    SweepGradient mSweepGradient2=new SweepGradient(300,300,Color.RED,Color.BLUE);

ComposeShader:以上效果的任意组合

Android 颜色渲染(十) ComposeShader组合渲染

/*** haderA    渲染器A,Shader及其子类对象* shaderB   渲染器B,Shader及其子类对象* mode   两种渲染器组合的模式,Xfermode对象*/ComposeShader mComposeShader = new ComposeShader(mBitmapShader, mRadialGradient2, PorterDuff.Mode.MULTIPLY);  mPaint.setShader(mComposeShader);
原创粉丝点击