首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自定View练习第一节

自定View练习第一节

作者头像
项勇
发布2019-12-13 12:58:57
4970
发布2019-12-13 12:58:57
举报
文章被收录于专栏:项勇项勇

1.线

线

    Paint mPaint = new Paint();
    /** 起始X      起始Y     结束X    结束Y    **/
    float[] pts={20,20,200,20, //第一根线
            200,20,200,200, //第二根线
            200,200,20,200, //第三根线
            20,200,20,20};    //第四根线
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setColor(Color.BLACK);//颜色
        mPaint.setStyle(Paint.Style.FILL);//类型
        mPaint.setAntiAlias(true);//抗锯齿
        mPaint.setStrokeWidth(5);
        canvas.drawLines(pts,mPaint);
    }

2.点

    Paint mPaint = new Paint();
    float[] pst = {20,20,40,40,60,60};
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setStrokeWidth((float)10);
        mPaint.setColor(Color.BLACK);
        /**
         * BUTT, 平头
         * ROUND, 圆头
         * SQUARE  方头
         */
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        canvas.drawPoints(pst,mPaint);
    }

3.圆

    Paint mPaint = new Paint();
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setColor(Color.GREEN);//颜色
        mPaint.setStyle(Paint.Style.STROKE);//类型
        mPaint.setStrokeWidth(15);//线条宽度
        mPaint.setAntiAlias(true);//抗锯齿
        canvas.drawCircle(200,200,100,mPaint);
    }

4.矩形

矩形

    Paint mPaint = new Paint();
    Rect mRect = new Rect();
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setColor(Color.GRAY);//颜色
        mPaint.setStyle(Paint.Style.FILL);//类型
        mPaint.setStrokeWidth(15);//线条宽度
        /**上下左右的坐标*/
        mRect.top = 50;
        mRect.bottom = 300;
        mRect.left = 50;
        mRect.right = 300;
        canvas.drawRect(mRect,mPaint);
    }

5.圆角矩形

圆角矩形

    Paint mPaint = new Paint();
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setColor(Color.BLACK);//颜色
        mPaint.setStyle(Paint.Style.FILL);//类型
        mPaint.setAntiAlias(true);//抗锯齿
        mPaint.setStrokeWidth(5);
        canvas.drawRoundRect(100,100,400,300,55,55,mPaint);
    }

6.椭圆

椭圆

    Paint mPaint = new Paint();
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setColor(Color.BLACK);//颜色
        mPaint.setStyle(Paint.Style.STROKE);//类型
        mPaint.setAntiAlias(true);//抗锯齿
        mPaint.setStrokeWidth(20);
                        /**   左       上        右          下      **/
        canvas.drawOval((float) 10,(float)50,(float)400,(float)200,mPaint);
    }

7.弧形

弧形

    Paint mPaint = new Paint();
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setColor(Color.GREEN);//颜色
        mPaint.setStyle(Paint.Style.FILL);//类型
        mPaint.setAntiAlias(true);//抗锯齿
                        /**左       上        右          下       起始角度     弧形角度**/
        canvas.drawArc(15,15,215,210,45,45,true,mPaint);
    }

8.弧形组合

弧形组合

    Paint mPaint = new Paint();
    public mAres(Context context, int i) {
        super(context);
        switch (i){
            case 1: {
                mPaint.setColor(Color.GREEN);//颜色
                mPaint.setStyle(Paint.Style.FILL);//类型
                mPaint.setAntiAlias(true);//抗锯齿
                startAngle = 45;
                sweepAngle = 45;
                left = 15;
                top = 10;
                break;
            }
            case 2: {
                mPaint.setColor(Color.RED);//颜色
                mPaint.setStyle(Paint.Style.FILL);//类型
                mPaint.setAntiAlias(true);//抗锯齿
                startAngle = 90;
                sweepAngle = 45;
                left = 10;
                top = 10;
                break;
            }
            case 3: {
                mPaint.setColor(Color.BLACK);//颜色
                mPaint.setStyle(Paint.Style.FILL);//类型
                mPaint.setAntiAlias(true);//抗锯齿
                startAngle = 135;
                sweepAngle = 90;
                left = 8;
                top = 5;
                break;
            }
            case 4: {
                mPaint.setColor(Color.BLUE);//颜色
                mPaint.setStyle(Paint.Style.FILL);//类型
                mPaint.setAntiAlias(true);//抗锯齿
                startAngle = 225;
                sweepAngle = 90;
                left = 13;
                top = 2;
                break;
            }
            case 5: {
                mPaint.setColor(Color.YELLOW);//颜色
                mPaint.setStyle(Paint.Style.FILL);//类型
                mPaint.setAntiAlias(true);//抗锯齿
                startAngle = 315;
                sweepAngle = 90;
                left = 18;
                top = 5;
                break;
            }
        }
    }
    int left = 0;
    int top = 0;
    int startAngle = 0;
    int sweepAngle = 0;
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
                        /**左       上        右          下       起始角度     弧形角度**/
        canvas.drawArc(left,top,200+left,200+top,startAngle,sweepAngle,true,mPaint);
    }

9.位图

位图

    Paint mPaint = new Paint();
    Bitmap bitmap;
    Rect src;
    RectF dst;
    int ia = 0;
    public mBitMap(Context context,int i) {
        super(context);
        ia = i;
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (ia==1){
            bitmap = BitmapFactory.decodeResource(this.getResources(),R.mipmap.myview0);
            /**  左偏移   上偏移*/
            canvas.drawBitmap(bitmap,10,10,mPaint);
        }else {
            bitmap = BitmapFactory.decodeResource(this.getResources(),R.mipmap.myview);
            int mBitMapWidth = bitmap.getWidth();
            int mBitMapHeight = bitmap.getHeight();
            src = new Rect(0,0,120,150); //是对图片进行裁截,若是空null则显示整个图片
            dst = new RectF(0,0,mBitMapWidth,mBitMapHeight); //是图片在Canvas画布中显示的区域,大于src则把src的裁截区放大, 小于src则把src的裁截区缩小
            canvas.drawBitmap(bitmap,src,dst,mPaint);  }
    }

10.文字

文字

    Paint mPaint = new Paint();
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setColor(Color.RED);//颜色
        mPaint.setTextSize(30);
        mPaint.setStyle(Paint.Style.FILL);//类型
        mPaint.setAntiAlias(true);//抗锯齿
        mPaint.setStrokeWidth(5);
                                                        /**  x y轴的偏移量 **/
        canvas.drawText("老子问有没有瓶子,都他妈聋了?",100,100,mPaint);
    }

11.自定义图形-心形

自定义图形

    Paint mPaint = new Paint();
    Path mPath = new Path();
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setColor(Color.RED);//颜色
        mPath.addArc(200,200,400,400,-225,255);
        mPath.arcTo(400,200,600,400,-180,225,false);
        mPath.lineTo(400,542);
        canvas.drawPath(mPath,mPaint);
    }

12.自定义图像2-双圆叠加镂空

自定义图像2

    Paint mPaint = new Paint();
    Path mPath = new Path();
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setColor(Color.RED);//颜色
        mPath.setFillType(Path.FillType.EVEN_ODD);
        mPaint.setAntiAlias(true);//抗锯齿
        mPath.addCircle(150,200,100, Path.Direction.CW);
        mPath.addCircle(200,200,100, Path.Direction.CW);
        canvas.drawPath(mPath,mPaint);
    }
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 项勇 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.线
  • 2.点
  • 3.圆
  • 4.矩形
  • 5.圆角矩形
  • 6.椭圆
  • 7.弧形
  • 8.弧形组合
  • 9.位图
  • 10.文字
  • 11.自定义图形-心形
  • 12.自定义图像2-双圆叠加镂空
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档