2016-06-03 24 views
2

Hallo im Schwierigkeiten mit Punkten auf dem Bogen der beiden Enden (Beginn und Ende)Zeichnen Kreis auf Start- und Endpunkt eines Bogens

Obwohl ich Bogen auf die Zeichnung auf Leinwand ziehen. Heres ist mein Beispielcode zum Zeichnen des Bogens.

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

    float width = (float) getWidth(); 
    float height = (float) getHeight(); 
    float radius; 

    if (width > height) { 
     radius = height/4; 
    } else { 
     radius = width/4; 
    } 

    float center_x, center_y; 
    final RectF oval = new RectF(); 

    center_x = width/2; 
    center_y = height/2; 

    oval.set(center_x - radius, 
      center_y - radius, 
      center_x + radius, 
      center_y + radius); 

    float percent = 25; 
    float arcRadius = 360; 
    float angle = arcRadius * (percent/100); 

    canvas.drawArc(oval, 270, 360, false, trackpaint); 
    canvas.drawArc(oval, 270, angle, false, arcPaint); 
} 

Das einzige fehlende Element ist das Setzen von Kreisen auf Anfangs- und Endpunkte des Bogens. Ich habe diesen Link versucht, aber es funktioniert Calculate Arc Center Point, Knowing It's Start and End Degrees. Jede Hilfe wird sehr geschätzt. Danke

Antwort

6

die Koordinate des Startpunktes ist:

double startX = Math.cos(Math.toRadians(270)) * radius + center_x; 

double startY = Math.sin(Math.toRadians(270)) * radius + center_y; 

die Koordinate des Endpunkts ist:

double endX = Math.cos(Math.toRadians(270 + angle)) * radius + center_x; 

double endY = Math.sin(Math.toRadians(270 + angle)) * radius + center_y; 

und dann können Sie Kreis mit dem Start ziehen Punkt und Endpunkt:

canvas.drawCircle(startX, startY, 10, paint); 

canvas.drawCircle(endX, endY, 10, paint); 
+0

Wenn ich Ihnen nur hundert Daumen hoch geben kann, würde ich tun. Entweder du hast hier ein paar Stunden verbracht. Cheers @ 7heaven – ralphgabb

+0

große Antwort, danke – Peter

+0

Hallo wird das auf nicht perfekte Kreise arbeiten? – Sheychan