自定义控件之绘图篇(一):概述及基本几何图形绘制 一目了然 ,适合初学者

惯例:先上图后说话,谢谢各位伙伴的支持! 有你们是我的福分!

             欢迎一起讨论和学习,QQ:732258496  微信:15520726587


 每日一言:处理好心情,再处理事情。

一、Paint与Canvas

像我们平时画图一样,需要两个工具,纸和笔。Paint就是相当于笔,而Canvas就是纸,这里叫画布。

所以,凡有跟要要画的东西的设置相关的,比如大小,粗细,画笔颜色,透明度,字体的样式等等,都是在Paint里设置;同样,凡是要画出成品的东西,比如圆形,矩形,文字等相关的都是在Canvas里生成。

下面先说下Paint的基本设置函数:

  • paint.setAntiAlias(true);//抗锯齿功能
  • paint.setColor(Color.RED);  //设置画笔颜色    
  • paint.setStyle(Style.FILL);//设置填充样式
  • paint.setStrokeWidth(30);//设置画笔宽度
  • paint.setShadowLayer(10, 15, 15, Color.GREEN);//设置阴影
二、实际代码
public class MyView extends View {
    Context m_context;

    public MyView(Context context) {
        super(context);
        m_context = context;
    }

    //重写OnDraw()函数,在每次重绘时自主实现绘图
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paintCircle(canvas);//画圆
        paintLint(canvas);//画直线
        paintLints(canvas);//画多条直线
        paintLints(canvas);//画多条直线
        paintPonts(canvas);//画多个点
        paintRect(canvas);//画矩形
        paintRoundRect(canvas);//画圆角矩形
        paintOval(canvas);//画椭圆
       paintArc(canvas);//画弧
    }

    /*画圆*/
    private void paintCircle(Canvas canvas) {
        //设置画笔基本属性
        Paint paint = new Paint();
        paint.setAntiAlias(true);//抗锯齿功能
        paint.setColor(Color.RED);//设置画笔的颜色
        paint.setStyle(Paint.Style.STROKE);//设置填充的样式
        paint.setStrokeWidth(5);//设置画笔的宽度
        paint.setShadowLayer(10, 15, 10, Color.GREEN);//设置阴影
        canvas.drawRGB(255, 255, 255);//设置画布颜色背景
        canvas.drawCircle(190, 200, 150, paint);//画圆
    }

    /*画直线*/
    private void paintLint(Canvas canvas) {
        //设置画笔基本属性
        Paint paint = new Paint();
        paint.setColor(Color.RED);//设置画笔的颜色
        paint.setStyle(Paint.Style.FILL);//设置填充的样式
        paint.setStrokeWidth(5);//设置画笔的宽度
        canvas.drawLine(100, 100, 200, 220, paint);//画直线
    }

    /*画多条直线*/
    private void paintLints(Canvas canvas) {
        //设置画笔基本属性
        Paint paint = new Paint();
        paint.setColor(Color.RED);//设置画笔的颜色
        paint.setStyle(Paint.Style.FILL);//设置填充的样式
        paint.setStrokeWidth(5);//设置画笔的宽度
        float[] pts = {10, 10, 100, 100, 200, 200, 400, 400};//(上面有四个点:(1010)、(100100),(200200),(400400)),两两连成一条直线;
        canvas.drawLines(pts, paint);//画多条直线
    }

    /*画多个点*/
    private void paintPonts(Canvas canvas) {
        //设置画笔基本属性
        Paint paint = new Paint();
        paint.setColor(Color.RED);//设置画笔的颜色
        paint.setStyle(Paint.Style.FILL);//设置填充的样式
        paint.setStrokeWidth(15);//设置画笔的宽度
        float[] pts = {10, 10, 100, 100, 200, 200, 400, 400};//(上面有四个点:(1010)、(100100),(200200),(400400)),两两连成一条直线;
        /*
        * float[] pts:点的合集,与上面直线一直,样式为{x1,y1,x2,y2,x3,y3,……
        * int offset:集合中跳过的数值个数,注意不是点的个数!一个点是两个数值;
        * count:参与绘制的数值的个数,指pts[]里人数值个数,而不是点的个数,因为一个点是两个数值
        * */
        canvas.drawPoints(pts, 2, 4, paint);//跳过第一个点,画出后面两个点,第四个点不画
    }

    //画矩形
    private void paintRect(Canvas canvas) {
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(15);
        //传入矩形的四个点,画出矩形
        canvas.drawRect(10, 10, 100, 100, paint);//直接构造
        RectF rectF = new RectF(120, 10, 220, 100);
        canvas.drawRect(rectF, paint);//使用RectF 构造
        Rect rect = new Rect(230, 10, 320, 100);
        canvas.drawRect(rect, paint);//使用Rect 构造
    }

    //画圆角矩形
    private void paintRoundRect(Canvas canvas) {
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(15);

        RectF rectF = new RectF(230, 10, 500, 100);
        canvas.drawRoundRect(rectF, 20, 10, paint);
    }

    //画椭圆
    private void paintOval(Canvas canvas) {
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(15);

        RectF rectF = new RectF(230, 10, 500, 100);
        canvas.drawRect(rectF, paint);//画矩形

        paint.setColor(Color.GREEN);
        canvas.drawOval(rectF, paint);//话椭圆
    }

    //画弧
    private void paintArc(Canvas canvas) {
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(5);
         /**
        *
        *RectF oval:生成椭圆的矩形
        *float startAngle:弧开始的角度,以X轴正方向为0        *float sweepAngle:弧持续的角度
        * *boolean useCenter:是否有弧的两边,True,还两边,False,只有一条弧
        */
        RectF rectF = new RectF(230, 10, 500, 100);
        canvas.drawArc(rectF, 0, 90, true, paint);
    }
}



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄毛火烧雪下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值