如何在标记旋转后重置标记的InfoWindows锚点始终位于顶部中间位置?问题是锚点与标记一起旋转。
static final LatLng PERTH = new LatLng(-31.90, 115.86);
Marker marker = mMap.addMarker(new MarkerOptions()
.position(PERTH)
.anchor(0.5,0.5)
.rotation(90.0)
.infoWindowAnchor(0.5,0));
//Update marker with new data (position and direction angle)
var angle = 130.0;
marker.setPosition(new LatLng(-30.20, 113.27));
marker.setRotation(angle);
marker.setInfoWindowAnchor(x,y); // how to calculate these values?
答案 0 :(得分:16)
var angle = 130.0; // rotation angle
var x = Math.sin(-angle * Math.PI / 180) * 0.5 + 0.5;
var y = -(Math.cos(-angle * Math.PI / 180) * 0.5 - 0.5);
marker.setInfoWindowAnchor((float)x, (float)y);
说明:
如果我们假设地图标记是圆形(最合理的旋转目的),并且我们知道InfoWindow锚点(B)可以设置为从0.0,0.0(左上角)到1,1的任何相对坐标点(右下)我们可以使用SIN和COS公式通过给定的旋转度找到圆线上的任何点。
A与B之间的X距离=半径* SIN(度); A和B之间的Y距离=半径* COS(度);
将它们用于Android标记坐标我们得到:
var x = Math.sin(-angle * Math.PI / 180) * 0.5 + 0.5;
var y = -(Math.cos(-angle * Math.PI / 180) * 0.5 - 0.5);