Canvas+Paint绘制路径,文字与图形

做android的朋友平时肯定会用到好多的图形,对于这些图形我们通常三种方式就可以解决。一、美工妹妹帮我们切图;二、shape可以解决;三、paint直接来绘图。
前面两种方法我就不介绍了,已经在我的博客中写过。
举个场景的例子,就给你一组数据,绘制一张折线图。
这里面可以借助第三方的类库来完成,当然对于一些公司来讲,很反感使用第三方的类库,所以你不得不使用其他的方法了。
在绘制过程中,最重要的就是,设置paint(画笔),canvas(画布)。
这里写图片描述
自定义一个类继承View这个基类,重写它的onDraw()这个方法。

public class LineView extends View {



    public LineView(Context context) {
        super(context);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //获取屏幕宽度
        WindowManager wm = (WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE);
        int width = wm.getDefaultDisplay().getWidth();

        canvas.drawColor(Color.WHITE);
       // PathEffect ps = new CornerPathEffect(10);
        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(2);
      //  paint.setPathEffect(ps);

        Path path = new Path();
        path.moveTo(0,0);
        Paint paint1 = new Paint();
        paint1.setColor(Color.RED);
        paint1.setStyle(Paint.Style.STROKE);
        paint1.setStrokeWidth(10);

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

        paint2.setStyle(Paint.Style.STROKE);
        paint2.setStrokeWidth(1);
        for(int i = 1 ;i<width/20+1;i++){
        //每隔20dp,随机生成一个坐标
            float x = 20*i;
            float y = (float)Math.random()*200;
            canvas.drawText("("+(int)x+","+(int)y+")",x,y,paint2);
            canvas.drawCircle(20*i,y,3,paint1);
            path.lineTo(20*i,y);
        }
    //绘制路径
        canvas.drawPath(path,paint);
        }
        }

绘制一个圆角的四分之一圆,并在其中绘制几个字
这里写图片描述
和上面一样的方法,重写Ondraw()方法。

public class LineView extends View {



    public LineView(Context context) {
        super(context);

    }

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


        canvas.drawColor(Color.WHITE);
        Paint paintPath=new Paint();

        Paint paintText=new Paint();

        paintPath.setColor(Color.RED); //路径的画刷为红色

        paintText.setColor(Color.WHITE); //路径上的文字为白色

        Path pathCWJ=new Path();

        pathCWJ.addCircle(10,10,80, Path.Direction.CW); // 半径为50px,绘制的方向CW为顺时针

        canvas.drawPath(pathCWJ,paintPath);

        canvas.drawTextOnPath("东方红",pathCWJ,35,15,paintText); //在路径上绘制文字
        }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值