当您长按可拖动标记时,标记会向上移动并允许您移动它。我的问题是我看不到标记的底部,因为我的手指在它上面。我正在尝试准确定位标记图标的底部中间。
一个简单的解决方法是控制标记在拖动时向上移动的偏移量。我会让这个偏移量足够大,这样你就可以看到手指上方的标记底部。
我尝试在 dragstart 中手动预偏移标记,但是一旦开始移动标记,它就会立即回到原始偏移。
当您长按可拖动标记时,标记会向上移动并允许您移动它。我的问题是我看不到标记的底部,因为我的手指在它上面。我正在尝试准确定位标记图标的底部中间。
一个简单的解决方法是控制标记在拖动时向上移动的偏移量。我会让这个偏移量足够大,这样你就可以看到手指上方的标记底部。
我尝试在 dragstart 中手动预偏移标记,但是一旦开始移动标记,它就会立即回到原始偏移。
目前这是不可能的。偏移量在 API 中是硬编码的。
我建议在gmaps-api-issues上发布功能请求。
我找到了一个解决这个问题的方法,至少对我来说就像一个魅力。想法:将标记图标的锚点设置为图标下方所需的毫米/英寸量。这会将图标向上移动到首选位置。但是这样做,您必须将标记的纬度偏移适当的度数。我用来从毫米计算度数的公式适用于地图的所有位置和缩放级别,但常数因子 (80) 取决于您使用的图标的大小,当然取决于您的锚点,而且很可能取决于分辨率的设备。对我来说,这段代码在我的 Galaxy S9 上完成了这项工作:
mMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {
@Override public void onMarkerDragStart(Marker marker) {
marker.setAnchor(0.5f, 1.4f);
VisibleRegion vR = mMap.getProjection().getVisibleRegion();
View v = findViewById(R.id.map);
offset = 80*(vR.latLngBounds.northeast.latitude - vR.latLngBounds.southwest.latitude)/v.getLayoutParams().height;
}
@Override public void onMarkerDrag(Marker marker) {
// Your code. Replace all 'marker.getPosition()' by 'new LatLng(marker.getPosition().latitude + offset, marker.getPosition().longitude)'
}
@Override public void onMarkerDragEnd(Marker marker) {
// Your code.
}
});