所以我正在制作Android游戏,我需要在谷歌地图窗口上叠加区域或多边形。
到目前为止,我已经做了以下事情:
class polygonOverlay extends Overlay {
//this is the array of vertices we need to draw
GeoPoint[] vet;
Point[] points;
private float[] fVet;
//get the vertices
public polygonOverlay(GeoPoint[] v) {
vet = v;
points = new Point[v.length];
fVet = new float[(v.length)*2];
}
//this is how we draw it.
@Override
public void draw(Canvas canvas, MapView mapv, boolean shadow) {
super.draw(canvas,mapv, shadow);
//do some things
//set all the points to a point.
for(int i = 0; i < points.length; i++) {
points[i] = new Point();
}
//convert from the array of geoPoints to the array of points using the projection.
for(int i = 0; i < vet.length; i++){
projection.toPixels(vet[i], points[i]);
}
//convert the point to the float array
for(int i = 0; i < points.length; i++) {
fVet[2*i] = points[i].x;
fVet[(2*i)+1] = points[i].y;
}
//things be done...
//create a array of int colors.
int[] colorArray = new int[points.length];
for(int i = 0; i < points.length; i++) {
colorArray[i] = Color.RED;
}
//if we are drawing a shadow, then dont draw anything
Paint mPaint = new Paint();
mPaint.setDither(true);
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(4);
//lets draw some things.
canvas.drawLine(points[1].x, points[1].y, 200, 200, mPaint);
canvas.drawVertices(
Canvas.VertexMode.TRIANGLES,
fVet.length,
fVet,
0,
null,
0,
colorArray,
0,
null,
0,
0,
mPaint
);
}
}
然而,问题是它不会显示多边形。我已经尝试了一切,直到昨晚凌晨2点这样做,但它不会工作。
我开始认为我的手机不是我的代码......
谁能看到我做错了什么?
答案 0 :(得分:1)
多边形创建很简单:
首先定义一个Paint对象:
Paint mPaint = new Paint();
mPaint.setStrokeWidth(2); //2 pixel line width
mPaint.setColor(0xFF097286); //tealish with no transparency
mPaint.setStyle(Paint.Style.STROKE); //stroked, aka a line with no fill
mPaint.setAntiAlias(true); // no jagged edges, etc
然后用:
绘制路径yourCanvas.drawPath(path,mPaint);
以下是地图叠加的链接:android maps circle overlay, dynamically change radius?
答案 1 :(得分:0)
有一个bug in the drawVertices method要求colorArray
与代码中的fVet
数组的大小相同。
注意:实际上只有第一个fVet/2
颜色用于绘图,其他颜色将被忽略。