Android之shader渲染(线性渐变、镜像渐变、角度渐变)
2013-09-10 16:31
453 查看
参考文章: http://blog.csdn.net/q445697127/article/details/7865504 http://xxw8393.blog.163.com/blog/static/37256834201072655832696/
一、LinearGradient线性渐变
一、LinearGradient线性渐变
在android平台中提供了两种重载方式来实例化该类分别为,他们的不同之处为参数中第一种方法参数仅为起初颜色color0和最终颜色color1;而第二种方法可以用颜色数组,和位置来实现更细腻的过渡效果,比如颜色采样int[] colors数组中存放20种颜色,则渐变将会逐一处理。
LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)
LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)
// 创建LinearGradient并设置渐变颜色数组
// 第一个,第二个参数表示渐变起点 可以设置起点终点在对角等任意位置
// 第三个,第四个参数表示渐变终点
// 第五个参数表示渐变颜色
// 第六个参数可以为空,表示坐标,值为0-1 new float[] {0.25f, 0.5f, 0.75f, 1 }
// 如果这是空的,颜色均匀分布,沿梯度线。
// 第七个表示平铺方式
// CLAMP重复最后一个颜色至最后
// MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果
// REPEAT重复着色的图像水平或垂直方向
二、 RadialGradient镜像渐变
有了上面的基础,我们一起来了解下径向渐变。和上面参数唯一不同的是,径向渐变第三个参数是半径,其他的和线性渐变相同。
RadialGradient(float x, float y, float radius, int[] colors, float[] positions, Shader.TileMode tile)
RadialGradient(float x, float y, float radius, int color0, int color1, Shader.TileMode tile)
三、 SweepGradient角度渐变
对于一些3D立体效果的渐变可以尝试用角度渐变来完成一个圆锥形,相对来说比上面更简单,前两个参数为中心点,然后通过载入的颜色来平均的渐变渲染。
SweepGradient(float cx, float cy, int[] colors, float[] positions)
//对于最后一个参数SDK上的描述为May be NULL. The relative position of each corresponding color in the colors array, beginning with 0 and ending with 1.0. If the values are not monotonic, the drawing may produce unexpected results. If positions is NULL, then the colors
are automatically spaced evenly.,所以Android123建议使用下面的重载方法,本方法一般为NULL即可。
SweepGradient(float cx, float cy, int color0, int color1)
一、LinearGradient线性渐变
一、LinearGradient线性渐变
在android平台中提供了两种重载方式来实例化该类分别为,他们的不同之处为参数中第一种方法参数仅为起初颜色color0和最终颜色color1;而第二种方法可以用颜色数组,和位置来实现更细腻的过渡效果,比如颜色采样int[] colors数组中存放20种颜色,则渐变将会逐一处理。
LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)
LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)
// 创建LinearGradient并设置渐变颜色数组
// 第一个,第二个参数表示渐变起点 可以设置起点终点在对角等任意位置
// 第三个,第四个参数表示渐变终点
// 第五个参数表示渐变颜色
// 第六个参数可以为空,表示坐标,值为0-1 new float[] {0.25f, 0.5f, 0.75f, 1 }
// 如果这是空的,颜色均匀分布,沿梯度线。
// 第七个表示平铺方式
// CLAMP重复最后一个颜色至最后
// MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果
// REPEAT重复着色的图像水平或垂直方向
二、 RadialGradient镜像渐变
有了上面的基础,我们一起来了解下径向渐变。和上面参数唯一不同的是,径向渐变第三个参数是半径,其他的和线性渐变相同。
RadialGradient(float x, float y, float radius, int[] colors, float[] positions, Shader.TileMode tile)
RadialGradient(float x, float y, float radius, int color0, int color1, Shader.TileMode tile)
三、 SweepGradient角度渐变
对于一些3D立体效果的渐变可以尝试用角度渐变来完成一个圆锥形,相对来说比上面更简单,前两个参数为中心点,然后通过载入的颜色来平均的渐变渲染。
SweepGradient(float cx, float cy, int[] colors, float[] positions)
//对于最后一个参数SDK上的描述为May be NULL. The relative position of each corresponding color in the colors array, beginning with 0 and ending with 1.0. If the values are not monotonic, the drawing may produce unexpected results. If positions is NULL, then the colors
are automatically spaced evenly.,所以Android123建议使用下面的重载方法,本方法一般为NULL即可。
SweepGradient(float cx, float cy, int color0, int color1)
public class GardientDemo extends View { private Rect mRect; //线性渐变 private LinearGradient mLinearGradientRepeat; private LinearGradient mLinearGradientClamp; private LinearGradient mLinearGradientMirror; //扫描渐变(类似雷达扫描) private SweepGradient mGradientSweep; //环形渐变 private RadialGradient mRadialGradientClamp; private RadialGradient mRadialGradientMirror; private RadialGradient mRadialGradientRepeat; //混合渲染 private ComposeShader mComposeShader; private Paint mPaint; /** * @param context */ public GardientDemo(Context context) { super(context); mLinearGradientClamp = new LinearGradient(0, 0, 0, 50, new int[] {Color.RED, Color.GREEN, Color.BLUE}, null, TileMode.CLAMP); mLinearGradientMirror = new LinearGradient(0, 0, 0, 50, new int[] {Color.RED, Color.GREEN, Color.BLUE}, null, TileMode.MIRROR); mLinearGradientRepeat = new LinearGradient(0, 0, 0, 50, new int[] {Color.RED, Color.GREEN, Color.BLUE}, null, TileMode.REPEAT); mGradientSweep = new SweepGradient(700, 600, new int[] {Color.RED, Color.GREEN, Color.BLUE}, null); mRadialGradientClamp = new RadialGradient(100, 600, 50, new int[] {Color.RED, Color.GREEN, Color.BLUE}, null, TileMode.CLAMP); mRadialGradientMirror = new RadialGradient(300, 600, 50, new int[] {Color.RED, Color.GREEN, Color.BLUE}, null, TileMode.MIRROR); mRadialGradientRepeat = new RadialGradient(500, 600, 50, new int[] {Color.RED, Color.GREEN, Color.BLUE}, null, TileMode.REPEAT); mComposeShader = new ComposeShader(mLinearGradientMirror, mRadialGradientMirror, PorterDuff.Mode.SRC); mRect = new Rect(); mPaint = new Paint(); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); // LinearGradient的高度只有100而绘制的矩形有200所以才会有重复 // 如果高度两者相同clamp重复是看不出效果的 //clamp mRect.set(0, 0, getWidth(), 100); mPaint.setShader(mLinearGradientClamp); canvas.drawRect(mRect, mPaint); //mirror mRect.set(0, 150, getWidth(), 250); mPaint.setShader(mLinearGradientMirror); canvas.drawRect(mRect, mPaint); //repeat mRect.set(0, 300, getWidth(), 400); mPaint.setShader(mLinearGradientRepeat); canvas.drawRect(mRect, mPaint); //mGradientRadial mPaint.setShader(mRadialGradientClamp); canvas.drawCircle(100, 600, 100, mPaint); mPaint.setShader(mRadialGradientMirror); canvas.drawCircle(300, 600, 100, mPaint); mPaint.setShader(mRadialGradientRepeat); canvas.drawCircle(500, 600, 100, mPaint); //mGradientSweep mPaint.setShader(mGradientSweep); canvas.drawCircle(700, 600, 100, mPaint); } }
相关文章推荐
- Android之shader渲染(线性渐变、镜像渐变、角度渐变)
- Android 颜色渲染Shader
- 线性渐变、辐射渐变、角度渐变-QLinearGradient,QRadialGradient,QConicalGradient
- Android Paint之Shader渲染详解
- android使用shader进行渲染
- Android学习之Shader渲染
- Android渲染器Shader:梯度渐变扫描渲染器SweepGradient(二)
- android 图像渲染(Shader)
- Android渲染器Shader:梯度渐变扫描渲染器SweepGradient(二)
- android中使用shader实现渐变效果
- Android Shader 颜色、图像渲染 paint.setXfermode
- Android学习之Shader渲染
- 【Shader】用一张渐变图实现卡通渲染效果
- Android - Shader图像渲染
- Android使用BitmapShader图形渲染实现圆形、圆角和椭圆自定义图片View
- Android OpenGL ES零基础系列(三):OpenGL ES的渲染管道及VertexShader与FragmentShader
- Android_图像渲染(Shader)
- Android高级渲染Shader(上)——基本用法
- Bitmap位图渲染与操作(图片移动,放大,缩小,旋转,镜像发转)--android游戏开发
- Android特效专辑(二)——ViewPager渲染背景颜色渐变(引导页)