Shader的介绍
来源:互联网 发布:tfboys三只的关系知乎 编辑:程序博客网 时间:2024/06/18 21:45
Shader着色器,用canvas绘制一个图形后,在这个图形内部进行着色。
例如如果你用带有着色器的画笔去绘制一个圆形,那么这个圆形内部就按照你指定的着色器你渲染色彩,着色器可以是图片,也可以是不同颜色按照梯度规律去变化。
分类
- BitmapShader :图片贴图效果
- LinearGradient:线性渐变色效果
- RadialGradient:环形渐变色效果
- SweepGradient:雷达扫描效果
- 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);
阅读全文
0 0
- Shader的介绍
- Shader介绍
- Shader 介绍
- GLSL Tessellation Shader的编程入门介绍
- Unity3D中关于Shader的简单介绍
- Vertex Shader & Pixel Shader 介绍
- Vertex Shader & Pixel Shader 介绍
- Vertex Shader&Pixel Shader介绍
- Unity3D之Shader:Shader介绍
- Unity shader教程-第二课:Shader的框架和Properties详细介绍
- Unity Shader入门介绍
- unity-Shader入门介绍
- Shader第一讲 unity Shader 介绍
- Android着色器Shader介绍
- Cocos2dx Shader 使用系列之一:OpenGL Shader Language介绍
- [Unity3D]几种常见的渲染类型:Normal Shader的简单介绍
- Unity3D的着色器介绍(二)——Unity3D的Shader基本结构说明
- 几种常见的渲染类型:Normal Shader的简单介绍
- nginx的upstream目前支持的5种方式的分配
- 线程里面使用注解---线程里使用注解的正确姿势
- lenna
- OkHttp的简单使用
- (一)Kafka中文教程-初识kafka
- Shader的介绍
- 【解决】linux下svn权限配置不起作用
- java基础提高篇--类型转换
- LeetCode 82. Remove Duplicates from Sorted List II pre指针,首元素的处理
- [笔记]: 树状数组
- [iOS] objc_setAssociatedObject objc_getAssociatedObject 简单明了的一个理解
- JVM加载class文件的原理机制
- 《Android源码设计模式解析与实战》读书笔记(十五)——模板方法模式
- Java类加载器介绍总结