2017-04-18 1386 views

回答

3

我想你可以通过绘制三行部分重叠解决此:

  • 两个外部线路用Paint.Cap.ROUND
  • 一个内符合​​3210

假设你的输入数据是

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

你去如下,

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(...) 

您可能需要稍微改变为中心线弧角(必须是cornerRadius长,两侧各一个),但是这很容易。

+0

在这个例子中'width'基本上是笔画宽度,'radius'是从圆心到每一行中间的距离。我不知道'Canvas'作为输入是什么,但这应该很容易修改。 – natario