我有一个 MapView,上面有各种标记。第一次进入 MapActivity 时,我在标记上设置了可绘制对象的边界,一切看起来都很好。标记和阴影都显示正确。但是当我点击另一个活动并返回时,阴影或标记不再正确绑定。有时它只是受影响的一些标记。谁能告诉我这里发生了什么?这是一些代码。下面是我在可绘制标记上设置边界的地方:
InputStream is = assetManager.open(imageName);
drawable = Drawable.createFromStream(is, null);
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
drawable.setBounds(-width / 2, -height, width - (width / 2), 0);
以下是我如何在地图中创建/添加叠加项目:
GeoPoint point = createGeoPoint(lat, lon);
OverlayItem overlayItem = new OverlayItem(point, character.get_id(), "");
Drawable image = drawable;
overlayItem.setMarker(image);
itemizedOverlay.addOverlay(overlayItem);
据我所知,叠加层并没有被重新添加到地图中,这只是在 onResume() 事件之后的重绘。有任何想法吗?
更新:我实际上已经弄清楚,只有点击类型的图像会移动,而不是阴影,而是移动的图像。因此,在有 x 个 A 类型的图像和 y 个 B 类型的图像中,我点击任何 A 类型的图像,当我返回 MapActivity 时,所有 A 类型的图像都与其阴影未对齐,而所有类型的图像B 仍然正确对齐。
另一个更新:我正在将边界输出到日志,并在返回地图屏幕后看到边界正在发生变化。最初添加标记时,其边界为:
[矩形(-25, -48 - 25, 1)]
但是当返回地图屏幕时,边界已更改为:
[矩形(0, 0 - 50, 49)]
……为什么会这样?
另一个更新:我有一个解决方法......但我仍然想知道为什么会这样。解决方法是覆盖 draw 方法,并在调用 draw 方法时设置边界(到中心底部)。这是代码:
@Override
public void draw(Canvas canvas) {
int dWidth = getIntrinsicWidth();
int dHeight = getIntrinsicHeight();
setBounds(-dWidth / 2, -dHeight, dWidth / 2, 0);
super.draw(canvas);
}