【问题标题】:Drawing a shape with a curve line用曲线绘制形状
【发布时间】:2015-05-03 17:43:38
【问题描述】:

想像这张图那样画什么

因为这将在链接 ShapeDrawable Drawing multiple shapes with ShapeDrawable in xml with Android 中使用,但不知道如何制作线条曲线 - - - - - - - - - - -编辑 - - - - - - - - - - - - - - --------

基于@Bojan Kseneman 的回答,尝试使用以下代码

    PointF pt1l = new PointF(canvas.getWidth()/2+40, (float)newPosY-canvas.getWidth()/40);//canvas.getWidth()/40
    PointF pt2l = new PointF(canvas.getWidth()/2+40, (float)newPosY+canvas.getWidth()/40);
    PointF midl = new PointF(canvas.getWidth()/2+30, (float)newPosY+canvas.getWidth()/40);

    PointF pt1r = new PointF(canvas.getWidth()/2-40, (float)newPosY-canvas.getWidth()/40);
    PointF pt2r = new PointF(canvas.getWidth()/2-40, (float)newPosY+canvas.getWidth()/40);
    PointF midr = new PointF(canvas.getWidth()/2-30, (float)newPosY+(canvas.getWidth()/40)/2);

    Path pathLeft = new Path();
    //pathLeft.setFillType(Path.FillType.EVEN_ODD);
    pathLeft.moveTo(pt1l.x,pt1l.y);
    pathLeft.quadTo(midl.x,midl.y,pt2l.x,pt2l.y);

    Path pathRight = new Path();
    //pathRight.setFillType(Path.FillType.EVEN_ODD);
    pathRight.moveTo(pt1r.x,pt1r.y);
    pathRight.quadTo(midr.x,midr.y,pt2r.x,pt2r.y);
    Paint curveLineR = new Paint();
    curveLineR.setColor(Color.GREEN);

    Paint curveLineL = new Paint();
    curveLineL.setColor(Color.GREEN);

    Paint circle = new Paint();
    circle.setColor(Color.GREEN);

    canvas.drawPath(pathLeft, curveLineL);
    canvas.drawPath(pathRight, curveLineR);
    //canvas.drawCircle(canvas.getWidth()/2,canvas.getHeight()/2,canvas.getWidth()/30,circle);
    canvas.drawCircle(canvas.getWidth()/2,(float)newPosY,canvas.getWidth()/40,circle);

但没有得到更像圆的一部分的曲线(改变 midr 和 midl 的值越来越近,但仍然不是一条线)。也许通过更多的测试可以得到这条线,但现在只需要圆圈,对于那些也试图让曲线离开代码的人来说,+1 表示@Bojan Kseneman 指向正确的方向。

【问题讨论】:

    标签: android xml drawable shapes


    【解决方案1】:

    您应该制作一个自定义视图并使用 Canvas 绘制类似的内容。您必须在中间绘制两条路径(两条曲线)和一个圆圈。这是基本的想法,您必须自己完成其余的工作。

    protected void onDraw(Canvas canvas) {
     super.onDraw(canvas);
     Path pathLeft = new Path();
     pathLeft.moveTo(x1, y1);
     pathLeft.quadTo(x1, y1, x2, y2);
    
     Path pathRight = new Path();
     pathLeft.moveTo(x1, y1);
     pathLeft.quadTo(x1, y1, x2, y2);
    
     canvas.drawPath(pathLeft, mPathPaint);
     canvas.drawPath(pathRight, mPathPaint);
     canvas.drawCircle(x, y, radius, paint); 
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-18
      • 2022-10-16
      • 2010-12-26
      • 1970-01-01
      • 2014-04-29
      • 2021-12-01
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      相关资源
      最近更新 更多