前面两篇我们讲了canvas的一些方法,今天我们来看下paint的setShader方法。
那么shader是什么呢?听听android怎么说:“Shader is the based class for objects that return horizontal spans of colors during drawing. A subclass of Shader is installed in a Paint calling paint.setShader(shader). After that any object (other than a bitmap) that is drawn with that paint will get its color(s) from the shader.”大概意思大概是shader是一个在绘制过程中返回水平跨度即水平方向颜色的基础类,就是说它是一种颜色的变化过程而不是一种具体的颜色,当paint调用了paint.setShader(shader)时候就会创建一个shader的子类设置给画笔。在设置之后除了bitmap的任何对象在用画笔绘制的时候都由shader告诉其颜色该怎么绘制。是的,我们都用shader的子类来设置给画笔,我们下面就看看shader的五种子类。
- LinearGradient(float x0, float y0, float x1, float y1,@ColorInt int color0, @ColorInt int color1,@NonNull TileMode tile):这个shader是线性的颜色渐变,来看参数(x0,y0)和(x1,y1)两个坐标,因为是水平方向的,所以说渐变颜色线开始的位置就是从(x0,y0)做一条跟x轴平行的直线,渐变颜色线结束的位置就是从(x1,y1)做一条跟x轴平行的直线,这两条直线之间的区域(当然这个区域也是在我们绘制的图形内部的)就是颜色渐变的区域,color0是渐变的起始颜色,color1是渐变的结束颜色,我们有这么一个shader对象,Shader shader = new LinearGradient(200, 0, 200, 400, Color.BLUE, Color.RED, Shader.TileMode.CLAMP)且用设置了这个shader对象的paint绘制了一个圆canvas.drawCircle(200, 200, 200, paint),咱们运行看下效果: