您好我正在使用此标记的调整版本(http://www.clker.com/clipart-orange-pin-4.html)在Android上的Google地图中显示标记。
问题是我不知道如何使标记点与坐标匹配。 箭头点大约是宽度坐标的1/5和高度的最大值。
这是我的班级
public class GestionaleItemizedOverlay extends com.google.android.maps.ItemizedOverlay {
public GestionaleItemizedOverlay(Drawable defaultMarker, Context context) {
//super(boundCenterBottom(defaultMarker));
super(boundCenter(defaultMarker));
this.mContext = context;
}
...
这个
this.marker_poi = this.getContext().getResources().getDrawable(R.drawable.marker);
this.marker_poi.setBounds(this.marker_poi.getIntrinsicWidth() / 2, this.marker_poi.getIntrinsicHeight(), this.marker_poi.getIntrinsicWidth() / 2, 0);
new GestionaleItemizedOverlay(this.poi, this.context);
在将标记传递给构造函数之前,我是否需要在标记上设置setBounds?为什么super(defaultMarker)会使所有标记都不显示?
答案 0 :(得分:2)
之前的答案是对的,您需要使用标记的BOUNDS值。
我相信你知道边界矩形决定了对象的大小......如果你只是调用一个普通的,那么地图上的标记会将你的标记的左上角坐标放在GPS坐标上。关于图像大小的setbounds。
您需要做的是修改图像的边界,以便您拍摄的图像部分超出您想要的地图上的点。
因此,如果您调整大小的图像是20 x 20,并且您的实际箭头提示(假设图像是箭头,并且您希望它与地图上的点完全对齐),则说X = 4且Y = 10,你需要相应地修改图像的边界,以便将图像“移动”到你想要的位置。
因为0,0会将图像放在右边4个像素,并且与地图上的实际点相差10个像素,你的边界不应该是0,0,X,Y,但应该是-4, -10,图像-4的X尺寸,图像-10的Y尺寸(在这种情况下,图像的xsize和图像的ysize都是20,但应使用适合您情况的值。)
答案 1 :(得分:1)
是的,你需要setBounds,但是你可以在构造函数中执行它,这是我在构造函数中将它设置为左下角的方法:
public class CustomOverlay extends ItemizedOverlay<CustomOverlayItem> {
public CustomOverlay(Drawable defaultMarker, Context context) {
super(defaultMarker);
defaultMarker.setBounds(0, -defaultMarker.getIntrinsicHeight(), defaultMarker.getIntrinsicWidth(), 0);
}
你需要在边界的左侧添加一点额外的东西,使中心点位于正确的位置。您应该记住这是在px中设置的,所以制作某种DP转换器,以便为每种屏幕尺寸的不同图像正确设置。
关于第二个问题,您需要一个上下文才能知道添加叠加层的位置。如果没有上下文,您只需创建叠加层,而无需提及它应该使用的位置(如果您愿意,可以稍后添加)。