android自定义地图标记边界

时间:2012-04-02 11:26:24

标签: android google-maps

您好我正在使用此标记的调整版本(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)会使所有标记都不显示?

2 个答案:

答案 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转换器,以便为每种屏幕尺寸的不同图像正确设置。

关于第二个问题,您需要一个上下文才能知道添加叠加层的位置。如果没有上下文,您只需创建叠加层,而无需提及它应该使用的位置(如果您愿意,可以稍后添加)。