gpt4 book ai didi

java - 如何控制 Google Android map 上 OverlayItem 的大小?

转载 作者:行者123 更新时间:2023-11-30 04:16:05 26 4
gpt4 key购买 nike

所以我有几乎完全相同的problem discussed in this post除了他们决定采用的解决方案的黑客工作对我来说根本行不通。我需要一个真正的解决方案,所以我决定对 android map 源代码进行逆向工程以找到最佳解决方案。

我目前的解决方案是在我的类中覆盖扩展 OverlayItem 的 draw 方法,但随后我遇到了点击 map 上的叠加项不起作用的问题(点击注册在不同于绘制实际项目)。因此,我将继续挖掘,直到找到要覆盖的方法的适当组合。

最佳答案

对于和我有同样问题的人来说,解决方案其实很简单。

您所要做的就是在 OverlayItem 的可绘制对象上设置边界,如下所示:

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);
}

值得注意的是,overlay item的bounds是从0,0开始的,实际上是平移到OverlayIcon左上角的 Canvas 。在我的示例中,如果将宽度设置为 50 并将高度设置为 50,OverlayItem 将在 map 上以其定义的位置(在 OverlayItem 的构造函数中设置)为中心绘制。您可以在 Overlay 的源代码中看到这种情况:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com