저와 같은 문제가있는 사람은 해결책이 실제로 매우 간단합니다.
이처럼 OverlayItem의 당김에 경계를 설정해야 할 모든 :
Drawable d = myOverlayItem.getMarker(0);
d.setBounds(-xWidth/2, -yWidth/2, xWidth, yWidth);
getMarker의 매개 변수는 실제로 나를 위해 모두의 동일 overlayItem의 상태에 따라 다르지만 개인적으로 내 주 그래서 상관 없어 그냥 0을 사용했습니다.
내가 실제로 어떻게 경계를 설정하는 방법에 따라 달라질 수 있을지 모르겠지만, 나를 위해 내 ItemizedOverlay 하위 클래스의 그리기 방법 내에서 해냈어 :
@Override
public void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow) {
if (!shadow) {
// Do your projection calculations here, if necessary
for (int i = 0; i < mOverlays.size(); i++) {
Drawable d = mOverlays.get(i).getMarker(0);
d.setBounds(-width/2, -height/2, width/2, height/2);
}
}
super.draw(canvas, mapView, shadow);
}
오버레이 항목의 경계가 0,0에서 시작한다는 사실에 주목할 가치가 있습니다. 실제로는 오버레이 아이콘의 왼쪽 상단으로 캔버스가 변환됩니다. 위 예제에서 너비를 50으로, 높이를 50으로 설정하면 OverlayItem은 정의 된 위치를 중심으로지도에 그려집니다 (OverlayItem의 생성자에서 설정 됨). 당신은 오버레이의 소스에서 이런 일을 볼 수
protected static void drawAt(Canvas canvas, Drawable drawable, int x, int y, boolean shadow)
{
// .... Do Stuff ....
canvas.save();
canvas.translate(x, y);
// .... Do Stuff ....
drawable.draw(canvas);
// .... Do Stuff ....
canvas.restore();
}
는 (그것은 canvas.translate 호출로 발생)
을 오프 기회에 누군가가 here's the full source for Overlay을 관심 것이다.
(지도 작업을 리버스 엔지니어링하는 데 많은 시간이 걸렸으므로 최대한 노력했습니다.)