Shader之SweepGradient

SweepGradient梯度渐变也叫扫描渐变。

SweepGradient(float cx, float cy, int color0, int color1)

cx,cy是绘制渐变的原点坐标

color0开始颜色

color1结束颜色

以(cx,cy)为圆心,以圆心为坐标原点,从X轴正方向开始顺时针绘制。

public class SweepGradientView extends View {

    private Paint mPaint;
    private Rect rect;
    private SweepGradient sweepGradient;
    private int screenWidth,screenHeight;

    public SweepGradientView(Context context) {
        this(context,null);
    }

    public SweepGradientView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);

        screenWidth=ScreenUitl.getScreenWidth(context);
        screenHeight=ScreenUitl.getScreenHeight(context);

        mPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
        sweepGradient=new SweepGradient(200,200,Color.RED,Color.YELLOW);
        mPaint.setShader(sweepGradient);

        rect=new Rect(0,0,screenWidth,screenHeight);
    }

    @Override
    protected void onDraw(Canvas canvas) {
//        super.onDraw(canvas);

        canvas.drawRect(rect,mPaint);
    }

修改rect的范围

有此可以看出,显示的内容还是有绘制的rect的范围决定的。

另一个构造方法

SweepGradient(float cx, float cy, int[] colors, float[] positions)

cx ,cy为圆心坐标

colors参与渐变的颜色值,数量可以大于2

positions  确定各颜色渐变的区域如new float[] { 0, 0.1F, 0.5F, 0.7F, 0.8F },则RED 到 YELLOW 从0%到10% YELLOW到GREEN 10%到50% GREEN到CYAN 50%到70%  CYAN到BLUE 80%到100%。如果 positions 为空则各种颜色的渐变将会均分整个渐变区域

     screenWidth=ScreenUitl.getScreenWidth(context);
        screenHeight=ScreenUitl.getScreenHeight(context);

        mPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
        sweepGradient=new SweepGradient(200,200,new int[]{Color.RED, Color.YELLOW, Color.GREEN, Color.CYAN, Color.BLUE },
        new float[]{0, 0.1F, 0.5F, 0.7F, 0.8F});
        mPaint.setShader(sweepGradient);

        rect=new Rect(0,0,screenWidth,screenHeight);

猜你喜欢

转载自blog.csdn.net/zouzoutingting_/article/details/85006130