2017-04-18 1 views

Répondre

3

Je pense que vous pouvez contourner ce en dessinant trois lignes avec un chevauchement partiel:

  • deux lignes externes avec Paint.Cap.ROUND
  • une ligne intérieure avec Paint.Cap.BUTT

supposant vos données d'entrée sont

float lineWidth = 20; 
float lineRadius = 100; 
float cornerRadius = 2; 

Vous allez comme suit,

float width, radius; 
// Draw outer lines 
paint.setStrokeCap(Paint.Cap.ROUND); 
width = cornerRadius * 2; 

// Draw inner 
radius = lineRadius - lineWidth/2f + cornerRadius; 
canvas.draw(...) 

// Draw outer 
radius = lineRadius + lineWidth/2f - cornerRadius; 
canvas.draw(...) 

// Draw center 
paint.setStrokeCap(Paint.Cap.BUTT); 
width = lineWidth - 2f*cornerRadius; 
radius = lineRadius; 
canvas.draw(...) 

Vous pourriez avoir besoin de modifier légèrement l'angle de l'arc pour la ligne médiane (il doit être cornerRadius plus, de chaque côté), mais qui est facile.

+0

Dans cet exemple 'largeur' est essentiellement la largeur du trait, et' rayon' est la distance entre le centre du cercle et le milieu de chaque ligne. Je ne sais pas ce que 'Canvas' prend en entrée, mais cela devrait être facile à modifier. – natario