Android绘图之Shader
来源:互联网 发布:转视频格式的软件 编辑:程序博客网 时间:2024/05/17 19:59
Shader是绘图过程中的着色器,它有五个子类:
BitmapShader
ComposeShader
LinearGradient
RadialGradient
SweepGradient
它一般用在paint.setShader(shader)
中,paint
是一个Paint
对象,shader
是一个Shader对象。
1. BitmapShader
BitmapShader是用来做位图绘制时纹理的着色器,位图可以通过指定的平铺模式进行重复或者镜像。
BitmapShader的构造方法:
BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY)
bitmap
是我们要进行着色的位图tileX
是我们在X轴的平铺模式tileY
是我们在Y轴的平铺模式
平铺模式有三种:
Shader.TileMode.CLAMP
:如果着色器超出原始边界范围,会复制边缘颜色。Shader.TileMode.MIRROR
:横向和纵向的重复着色器的图像,交替镜像图像是相邻的图像总是接合。这个官方的说明可能不太好理解,说白了,就是图像不停翻转来平铺,直到平铺完毕。Shader.TileMode.REPEAT
: 横向和纵向的重复着色器的图像。
一般来说,当Canvas的宽度(高度)小于等于BitmapShader中Bitmap的宽度(高度),我们会使用Shader.TileMode.CLAMP
模式,否则我们会使用Shader.TileMode.MIRROR
或者Shader.TileMode.REPEAT
模式。
- X轴和Y轴平铺模式分别设置为
BitmapShader.TileMode.REPEAT
,BitmapShader.TileMode.MIRROR
: - X轴和Y轴平铺模式分别设置为
BitmapShader.TileMode.MIRROR
,BitmapShader.TileMode.REPEAT
: - X轴和Y轴平铺模式都设置为
BitmapShader.TileMode.MIRROR
: - X轴和Y轴平铺模式都设置为
BitmapShader.TileMode.REPEAT
: - X轴和Y轴平铺模式都设置为
BitmapShader.TileMode.CLAMP
:
可以很明显的看到当X轴和Y轴平铺模式都设置为BitmapShader.TileMode.CLAMP
,Canvas的宽度(高度)大于BitmapShader中Bitmap的宽度(高度)时,绘制出来的图像比较丑,我们来看看Canvas的宽度(高度)小于等于BitmapShader中Bitmap的宽度(高度)时的绘图情况,这种情况下面我们一般可以将我们的图像剪切成各种形状,最常见的是将图像剪切成图像。
2. ComposeShader
ComposeShader是一个组合着色器,它通过Xfermode
将两个着色器组合起来。
ComposeShader有两个构造方法:
ComposeShader(Shader shaderA, Shader shaderB, Xfermode mode)
shaderA
:这个着色器中的颜色被视为Xfermode
模式中的“dst”shaderB
:这个着色器中的颜色被视为Xfermode
模式中的“src”mode
:Xfermode
的模式
ComposeShader(Shader shaderA, Shader shaderB, PorterDuff.Mode mode)
mode
:也可以看成是Xfermode
的模式,更具体地说它是PorterDuffXfermode
的模式
3. LinearGradient
LinearGradient是线性渐变的着色器。
LinearGradient有两个构造方法:
LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)
x0
表示渐变的起始点x坐标y0
表示渐变的起始点y坐标x1
表示渐变的终点x坐标y1
表示渐变的终点y坐标colors
表示渐变的颜色数组positions
用来指定颜色数组的相对位置,可以为null,为null是表示颜色均匀分布tile
表示平铺模式
LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)
color0
表示渐变开始颜色color1
表示渐变结束颜色
利用LinearGradient实现一个从蓝色线性渐变到红色的圆形图:
4. RadialGradient
RadialGradient是径向渐变着色器。
RadialGradient有两个构造方法:
RadialGradient(float centerX, float centerY, float radius, int[] colors, float[] stops, Shader.TileMode tileMode)
centerX
:渐变中心x坐标centerY
:渐变中心y坐标radius
:渐变圆的半径colors
:分布在渐变圆中心到边缘的颜色stops
:取值0-1之间,用来指定颜色数组的相对位置,可以为null,为null是表示颜色均匀分布tile
表示平铺模式
RadialGradient(float centerX, float centerY, float radius, int centerColor, int edgeColor, Shader.TileMode tileMode)
centerColor
表示渐变中心的颜色edgeColor
:表示渐变边缘的颜色
利用RadialGradient实现一个从蓝色径向渐变到红色的圆形图:
5. SweepGradient
SweepGradient是绕着一个中心点进行扫描的渐变着色器。
SweepGradient有两个构造方法:
SweepGradient(float cx, float cy, int[] colors, float[] positions)
cx
:中心点的x坐标cy
:中心点的y坐标colors
:在中心点周围分配的颜色数组,最少包含两种颜色positions
:取值0-1之间,用来指定颜色数组的相对位置,可以为null,为null是表示颜色均匀分布
SweepGradient(float cx, float cy, int color0, int color1)
color0
:开始扫描的颜色color1
:结束扫描的颜色
利用SweepGradient实现一个从蓝色扫描渐变到红色的圆形图:
- Android绘图之Shader
- Android绘图基础之Shader
- Android 绘图Shader之BitmapShader
- Android游戏Graphics绘图之Shader类介绍
- Android中Canvas绘图之Shader使用图文详解
- Android中Canvas绘图之Shader使用图文详解
- Android 中 Canvas 绘图之 Shader 使用图文详解
- Android中Canvas绘图之Shader使用图文详解
- Android中Canvas绘图之Shader使用图文详解
- Android中Canvas绘图之Shader使用图文详解---转载
- Android绘图Canvas十八般武器之Shader详解及实战篇(上)
- Android绘图Canvas十八般武器之Shader详解及实战篇(下)
- Android绘图Canvas十八般武器之Shader详解及实战篇(上)
- Android绘图之XML绘图
- Android|图形图像之Shader
- 3D绘图程序设计之shader学习总结(一)
- 3D绘图程序设计之shader学习总结(二)
- 绘图Canvas十八般武器之Shader详解及实战
- Java集合中使用泛型参数及泛型上下限的问题
- 引入ResultSet包和PreparedStatement包错误
- 最右校招-服务器日志分析:一个十万行log统计问题的c语言代码的实现1
- Maven默认编码更改
- h5+css3 <canvas>实现五子棋
- Android绘图之Shader
- [设计模式]迭代器模式(Iterator)
- php 忽略非法字符集
- [LeetCode]Unique Substrings in Wraparound String
- leetcode-104-二叉树深度
- 第十一周
- Mysql 字符集
- 互联网的载体--操作系统
- c posix thread mutex cond rwlock