gpt4 book ai didi

android - Google Maps Android API - 如何在拖动时移动标记的 anchor

转载 作者:行者123 更新时间:2023-11-30 02:45:01 26 4
gpt4 key购买 nike

在 Android 上的 Google Maps map 上拖动标记时,标记会显示在手指下方,这使得几乎不可能将标记精确地放置在 map 上。有没有一种方法可以简单地将标记移动一些像素到顶部以使其可见?

我尝试在 onMarkerDragStart() 中移动标记,但当我继续拖动时它立即返回到原来的位置。我还尝试不断移动 onMarkerDrag() 中的标记位置。当停止拖动标记时,这会产生不可预知的结果。

是否有一种官方方法可以在拖动标记时移动它,或者有人找到了其他方法吗?

最佳答案

我自己对此很感兴趣,所以我尝试了很多方法来做到这一点。

我终于弄明白,默认情况下 Maps API 在标记开始被拖动时将其向右移动标记的宽度。要在拖动后伪造 [1, 1] anchor ,我们需要将标记水平向左(x 轴)移动其宽度,并垂直向上(y 轴)移动其高度。

这种方式似乎工作正常并且非常简洁。

这是一个例子:

// Get marker dimensions
Bitmap img = BitmapFactory.decodeResource(getResources(), R.drawable.marker);
final int width = img.getWidth();
final int height = img.getHeight();

mMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {
@Override
public void onMarkerDragStart(final Marker marker) {
marker.setAnchor(1, 1);
}

@Override
public void onMarkerDrag(Marker marker) {

}

@Override
public void onMarkerDragEnd(final Marker marker) {
Projection projection = mMap.getProjection();
// Coordinates to point (in screen pixels)
Point point = projection.toScreenLocation(marker.getPosition());
// Move to [1, 1]
point.x -= width;
point.y -= height;
// Point to coordinates
LatLng coords = projection.fromScreenLocation(point);
// Reset the anchor and use the coordinates
marker.setAnchor(0, 0);
marker.setPosition(coords);
}
});

// Your marker
BitmapDescriptor bitmapDescriptor =
BitmapDescriptorFactory.fromResource(R.drawable.marker);

mMap.addMarker(new MarkerOptions()
.position(mPolylines.get(0).getPoints().get(1000))
.icon(bitmapDescriptor)
.anchor(0, 0)
.draggable(true));

注意: this answer建议您可能需要等待 map 完全充气才能使用 map 的投影。您可能需要相应地进行编辑,但我发现没有它也能正常工作。

关于android - Google Maps Android API - 如何在拖动时移动标记的 anchor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25207889/

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