Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android自定义地图标记边界_Android_Google Maps - Fatal编程技术网

android自定义地图标记边界

android自定义地图标记边界,android,google-maps,Android,Google Maps,您好,我正在使用此标记()的一个调整大小的版本在android上的google地图中显示标记 问题是我不知道如何使标记点与坐标匹配。 箭头点大约位于宽度坐标的1/5和高度的最大值处 这是我的班级 public class GestionaleItemizedOverlay extends com.google.android.maps.ItemizedOverlay { public GestionaleItemizedOverlay(Drawable defaultMarker, C

您好,我正在使用此标记()的一个调整大小的版本在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);

在将标记传递给构造器之前,我是否需要在标记上设置背景?为什么super(defaultMarker)会使所有标记都不显示?

是的,您需要设置边界,但可以在构造函数中执行此操作,这是我在构造函数中执行的操作,将其设置为左下角:

public class CustomOverlay extends ItemizedOverlay<CustomOverlayItem> {
    public CustomOverlay(Drawable defaultMarker, Context context) {
        super(defaultMarker);
        defaultMarker.setBounds(0, -defaultMarker.getIntrinsicHeight(), defaultMarker.getIntrinsicWidth(), 0);
    }
public类CustomOverlay扩展ItemizedOverlay{
公共CustomOverlay(可绘制的defaultMarker,上下文){
超级(默认标记);
defaultMarker.setBounds(0,-defaultMarker.getIntrinsicHeight(),defaultMarker.getIntrinsicWidth(),0);
}
你需要在边界的左侧额外添加一点,使中心点位于右侧位置。你应该记住,这是在px中设置的,因此需要制作某种DP转换器,以便为不同屏幕大小的不同图像正确设置


关于第二个问题,您需要一个上下文才能知道在哪里添加覆盖。没有上下文,您只需创建覆盖,而不给它任何应该使用的位置的参考(如果您愿意,您可以稍后添加)。前面的答案是对的,您需要使用标记的边界值

我相信你知道边界矩形决定了物体的大小……如果你只是在你的图像的大小上调用一个正常的后退,你地图上的标记将以你的标记的左上角坐标在GPS坐标上进行布局

您需要做的是修改图像上的边界,以便您看到的图像部分位于您想要的地图上的点之上

因此,如果调整大小后的图像是20 x 20,并且实际的箭头尖(假设图像是一个箭头,并且您希望它与地图上的点精确对齐)是x=4和Y=10,则需要相应地修改图像的边界,以便将图像“移动”到您想要的位置


由于0,0会将图像向右放置4个像素,并且在与之关联的贴图上的实际点下方放置10个像素,因此边界不应为0,0,X,Y,而应为-4,-10,X图像大小-4,Y图像大小-10(在本例中,图像的X大小和图像的Y大小均为20,但应使用适合您的情况的值)

?!!!哪一个是左侧边界还是右侧边界?这个答案没有解释任何问题