2015-05-03 3 views
1

Whant рисовать, как в этом образе enter image description hereРисование фигур с кривой линией

для того что бы использовать как в ссылке 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); 

, но не получить кривую линию больше как Parte круга (изменяя значение MIDR и midl приблизился, но все еще был довольно строгим). Возможно, с небольшим количеством тестов можно получить линию, но на данный момент нужен только круг, для тех, кто также пытается получить кривую, оставляя код, и +1 для @Bojan Kseneman для указания в правильном направлении.

ответ

2

Вы должны сделать индивидуальный просмотр и нарисовать материал, подобный холсту. Вы должны нарисовать два пути (две кривые) и круг посередине. Вот основная идея, вам придется делать остальную работу самостоятельно.

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); 
} 
Смежные вопросы