因此,我几乎具有完全相同的problem discussed in this post,只是他们决定采用的解决方案的破解工作对我而言不起作用。我需要一个真正的解决方案,因此我决定对android maps源代码进行反向工程以找到最佳解决方案。
我当前的解决方案是重写扩展OverlayItem的类中的draw方法,但是随后我遇到了一个问题,即无法点击地图上的叠加项(点击会在实际项所在的位置以外的其他位置注册)画)。因此,我将继续挖掘,直到找到适当的方法组合来覆盖。
最佳答案
对于任何与我有相同问题的人,解决方案实际上都非常简单。
您所要做的就是在OverlayItem的drawable上设置边界,如下所示:
Drawable d = myOverlayItem.getMarker(0);
d.setBounds(-xWidth/2, -yWidth/2, xWidth, yWidth);
getMarker的参数实际上取决于overlayItem的状态,但就我个人而言,其所有状态均相同,因此我不在乎,只使用了0。
我不确定解决方案将如何变化,具体取决于您实际设置边界的位置,但是对我来说,我是在ItemizedOverlay子类的draw方法中完成的:
@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开始,它实际上是转换为OverlayIcon左上方的画布。在我的示例中,如果将width设置为50,height设置为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。
(我花了很多工作来逆向工程maps.jar,所以我最好还是从我的工作中得到最大的收获)。
关于java - 您如何在Google Android map 上控制OverlayItem的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10001655/