我有一些问题。
假设我有 Q 图标(简单的图标,比如说 android 徽标),我想将它们放在星形拓扑中,与单个星形中心(图标)相对,并将它们连接到 android 画布上。
我该怎么做?
任何确切的链接?
任何算法信息?
基本上你要做的是围绕一个中心创建点,给这些点一个图标和一条将它们与中心连接起来的线。
可以使用余弦/正弦在圆上创建二维点:
double angle;
point.x = offsetX + radius*Math.cos(angle);
point.y = offsetY + radius*Math.sin(angle);
为每个接触增加适当的角度值,并将这样的点存储在数组或列表中。
当涉及到绘图时,以它的点 ( yourCanvas.drawBitmap()
) 为中心画你的图标,然后画一条线到中心点 ( yourCanvas.drawLine()
)。
public void starTopology(Canvas mCanvas,int noOfFriends,float centerX,float centerY,int radious) {
final double PI = 3.14;
final double MARGIN = (2*PI)/noOfFriends;
final double OFFSETX = centerX;
final double OFFSETY = centerY;
final int RADIUS = radious;
float pointXCoord = 0;
float pointYCoord = 0;
double NextPositionOnCircumference = MARGIN;
Paint myCustomizedBrush = new Paint();
myCustomizedBrush.setAntiAlias(true);
myCustomizedBrush.setColor(Color.WHITE);
for(int i= 0; i < noOfFriends; i++){
pointXCoord = (float) (OFFSETX + RADIUS * Math.cos(NextPositionOnCircumference));
pointYCoord = (float) (OFFSETY + RADIUS * Math.sin(NextPositionOnCircumference));
NextPositionOnCircumference += MARGIN;
mCanvas.drawLine((float)OFFSETX, (float)OFFSETY, pointXCoord, pointYCoord, myCustomizedBrush);
pointXCoord -= 10;
pointYCoord -= 10;
mCanvas.drawBitmap(Utility.FriendProfilePic.get(i), pointXCoord, pointYCoord, null);
}
mCanvas.drawCircle((float)OFFSETX, (float)OFFSETY, 5, myCustomizedBrush);
}