最近想做出绚丽的效果,发现在绘图这块,相当不熟悉,看别人代码,也玩不溜,那只好回来把基础打扎实了,在去偷人家的技术。

这篇博客,就先熟悉一下:Canvas 和 Paint,Path。

Canvas 就相当于一张纸,Paint就相当于一只笔。因此,我们可以设置纸(Canvas )的背景颜色,旋转,移动等。对于笔(Paint),我们可以设置笔的颜色,粗细(即:填充宽度)等。那我们想画什么,有什么决定呢?,答案是:Path。

path是路径,画笔会根据你的路径绘制出相应的图片,当然为了方便,Android Canvas 的一些相关函数可以直接绘制出一些图形,例如:圆,正方形,长方形,椭圆等。

下面,我们就来一起看看代码:
public class Customeview extends View{

public Customeview(Context context, AttributeSet attrs) {
    super(context, attrs);
}

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

    canvas.drawColor(Color.WHITE);//画布的颜色

    /**
     * 画笔的相关设置
     */
    Paint paint=new Paint();
    paint.setAntiAlias(true);//是否抗锯齿
    paint.setColor(Color.RED);//画笔颜色
    paint.setStyle(Paint.Style.STROKE);//画笔填充样式
    paint.setStrokeWidth(4);//设置画笔的笔触宽度

    /**
     * float cx:圆心x坐标
     * loat cy:圆心y坐标
     * float radius:半径
     * Paint paint:画笔
     */
    canvas.drawCircle(40,40,10,paint);  //在画布上画一个圆

    /**
     * 关于drawRect的参数详解,参考我的博客
     * 《Android中的DrawRect()理解 》
     */
    canvas.drawRect(40,20,80,60,paint);//绘制正方形

    /**
     * RectF:绘制矩形类,它的四个参数,就跟drawRect的是个参数
     * 意义一样,只是RectF的四个参数是浮点型。
     */
    RectF rectF=new RectF(160,160,200,200);
    canvas.drawRoundRect(rectF,10,10,paint);//绘制圆角矩形

    canvas.drawOval(300,330,330,350,paint);//绘制椭圆,你把350,改成360不就是圆形了,为什么,自己去看参数


    /**
     * 关于画线的具体操作,请看我的这篇博客
     * 《 Android paint绘制直线,曲线 》
     */
    Path path=new Path();
    path.moveTo(400,200);
    path.lineTo(380, 280);
    path.lineTo(350,250);
    path.close();//把这个三个坐标点,形成一个封闭。
    canvas.drawPath(path,paint); //绘制三角行

    //对于画笔的填充风格的理解///
    Paint paintTwo=new Paint();
    paintTwo.setStyle(Paint.Style.FILL);
    paintTwo.setColor(Color.RED);

    canvas.drawCircle(400, 400, 30, paintTwo);  //在画布上画一个圆

    //设置渐变器后绘制//

    Paint paintThree =new Paint();
    paintThree.setColor(Color.BLUE);

    /**
     * float x0:, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile
     * 其中,参数x0表示渐变的起始点x坐标(注意:是相对x);参数y0表示渐变的起始点y坐标(注意:是相对y);
     * 参数x1表示渐变的终点x坐标(注意:是相对x1);参数y1表示渐变的终点y坐标(注意:是相对y1);
     *
     * color0表示渐变开始颜色;color1表示渐变结束颜色;参数tile表示平铺方式。
     *
     * Shader.TileMode有3种参数可供选择,分别为CLAMP、REPEAT和MIRROR:
     * CLAMP的作用是如果渲染器超出原始边界范围,则会复制边缘颜色对超出范围的区域进行着色
     * REPEAT的作用是在横向和纵向上以平铺的形式重复渲染位图
     * MIRROR的作用是在横向和纵向上以镜像的方式重复渲染位图
     *
     */
    Shader shader=new LinearGradient(0,80,80,80,new int[]{Color.BLUE,Color.BLACK,Color.YELLOW},
            null, Shader.TileMode.REPEAT);

    paintThree.setShader(shader);//设置画笔填充效果
    /**
     * float radius:阴影半径
     * float dx:X轴方向的偏移量。
     * float dy,:Y轴方向的偏移量
     * int shadowColor:阴影颜色
     */
    paintThree.setShadowLayer(20,20,20,Color.GRAY);//设置阴影,这个方法不支持硬件加速,所以我们要测试时必须关闭硬件加速。

    //关闭硬件加速。
    setLayerType(LAYER_TYPE_SOFTWARE, null);

    canvas.drawCircle(280, 460, 40, paintThree);  //在画布上画一个圆

    /设置字符大小后绘制
    Paint paintFour =new Paint();
    paintFour.setColor(Color.BLUE);

    paintFour.setTextSize(32);//设置绘制文本时,文本的文字大小
    paintFour.setShader(shader);
    canvas.drawText("jimTrency",500,500,paintFour);
}

}