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

来源:互联网 发布:苹果吉他软件效果器 编辑:程序博客网 时间:2024/06/05 19:50

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

             欢迎一起讨论和学习,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 0
原创粉丝点击