Android渲染器Shader:LinearGradient(一)

来源:互联网 发布:微软流程图软件 编辑:程序博客网 时间:2024/05/18 00:46


Android渲染器Shader:LinearGradient(一)

LinearGradient是Android的线性渲染器。我写5个LinearGradient渲染器渲染后的View表现结果。其中,LinearGradient 1,2,3只是修改渲染器的渲染模式,LinearGradient 1为重复(repeat),LinearGradient 2为镜像模式(mirror),LinearGradient 3为拉伸(clamp)。注意到LinearGradient 3在拉伸模式下,如果设定的LinearGradient不足以渲染整个画面,那么将拉伸最后一个颜色(我写的这个例子是蓝色Color.BLUE)。
LinearGradient 4和5则只是为了演示构造LinearGradient的float x0, float y0, float x1, float y1在复杂设置后会形成的画面渲染效果。
以LinearGradient 4为例,如果设定x0=0,y0=0,x1=300,y1=300,那么就是从左上角往右下角沿这个300 X 300的正方形的左上——右下对称轴渲染。

写一个完整代码。
先写一个LinearGradientView,这个LinearGradient继承自View:

package zhangphil.demo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.LinearGradient;import android.graphics.Paint;import android.graphics.Rect;import android.util.AttributeSet;import android.graphics.Shader;import android.view.View;public class LinearGradientView extends View {private LinearGradient linearGradient1 = null;private Paint paint1 = null;private LinearGradient linearGradient2 = null;private Paint paint2 = null;private LinearGradient linearGradient3 = null;private Paint paint3 = null;private LinearGradient linearGradient4 = null;private Paint paint4 = null;private LinearGradient linearGradient5 = null;private Paint paint5 = null;public LinearGradientView(Context context) {super(context);linearGradient1 = new LinearGradient(0, 0, 300, 0, new int[] { Color.RED, Color.YELLOW, Color.BLUE }, null,Shader.TileMode.REPEAT);paint1 = new Paint();linearGradient2 = new LinearGradient(0, 0, 300, 0, new int[] { Color.RED, Color.YELLOW, Color.BLUE }, null,Shader.TileMode.MIRROR);paint2 = new Paint();linearGradient3 = new LinearGradient(0, 0, 300, 0, new int[] { Color.RED, Color.YELLOW, Color.BLUE }, null,Shader.TileMode.CLAMP);paint3 = new Paint();linearGradient4 = new LinearGradient(0, 0, 300, 300, new int[] { Color.RED, Color.YELLOW, Color.BLUE }, null,Shader.TileMode.REPEAT);paint4 = new Paint();linearGradient5 = new LinearGradient(0, 300, 300, 0, new int[] { Color.RED, Color.YELLOW, Color.BLUE }, null,Shader.TileMode.REPEAT);paint5 = new Paint();}public LinearGradientView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);int left = 10, top = 20, right = 0, bottom = 0;// 渲染到View的最右边right = this.getWidth() - left;// 渲染的每一个矩形高度,也可以简单理解为坐标系的结束值ybottom = this.getHeight() / 5;// 渲染器1paint1.setShader(linearGradient1);Rect rect1 = new Rect(left, top, right, bottom);canvas.drawRect(rect1, paint1);top = top + bottom;// 渲染器2paint2.setShader(linearGradient2);Rect rect2 = new Rect(left, top, right, bottom * 2);canvas.drawRect(rect2, paint2);top = top + bottom;// 渲染器3paint3.setShader(linearGradient3);Rect rect3 = new Rect(left, top, right, bottom * 3);canvas.drawRect(rect3, paint3);top = top + bottom;// 渲染器4paint4.setShader(linearGradient4);Rect rect4 = new Rect(left, top, right, bottom * 4);canvas.drawRect(rect4, paint4);top = top + bottom;// 渲染器5paint5.setShader(linearGradient5);Rect rect5 = new Rect(left, top, right, bottom * 5);canvas.drawRect(rect5, paint5);}}


简单期间,直接在Activity里面的setContentView里面加载:

package zhangphil.demo;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);LinearGradientView linearGradientView= new LinearGradientView(this); ;setContentView(linearGradientView);}}


代码运行结果:


0 0
原创粉丝点击