如何获取地图的InfoWindow视图的屏幕坐标

时间:2014-05-25 06:42:24

标签: android google-maps android-layout

我在GoogleMap中有一个InfoWindow,其中包含按钮,我正在尝试使用choose007的hack来改变它们的工作(请参阅此question)。

我的方法依赖于获取InfoWindow中按钮的屏幕坐标,并在onDispatchTouchEvent函数中对其进行操作。

但是,所有获取屏幕坐标的尝试都会失败。我在onDispatchTouchEvent内调用它(即创建它之后很久),但按钮和视图都得到0,0。

我认为这是因为InfoWindow是某种特殊情况而不是实际的UI元素? (IIRC整个视图基本上只是一个位图,它在地图上是blit?)有没有办法获得坐标?我应该提一下,我试图避免涉及魔术数字的任何事情,比如在链接中选择了@7的解决方案。

以下是我正在做的事情的简化说明:

public boolean onDispatchTouchEvent(MotionEvent ev) {
    int[] location = new int[2];
    mTestButton.getLocationOnScreen(location);  // Returns 0,0
    mTestView.getLocationOnScreen(location);    // Returns 0,0

    return false;
}

public View getInfoContents(Marker marker) {
    LayoutInflater inflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mTestView = inflater.inflate(R.layout.info_window, null);
    mTestButton = ((Button) mTestView.findViewById(R.id.test_button));
}

1 个答案:

答案 0 :(得分:1)

所以你已经在infowindow上走了一条死胡同,因为那不是你应该用来制作有按钮等的真正定制的信息窗口。不是这个扬基工程师不会这样做。

如果您想要在用户单击标记时显示自定义内容,则捕获标记单击在标记坐标处显示您的视图,将地图中心放置到标记坐标并从 true

https://developers.google.com/maps/documentation/android/marker#marker_click_events

onMarkerClick

单击或点按标记时调用。 参数 标记单击的标记。 返回

如果侦听器已使用该事件(即,不应发生默认行为),则为true,否则为false(即,应发生默认行为)。默认行为是相机移动到地图并显示信息窗口。

那么我如何在地图上放置一些形状很好的东西呢?我需要一个图像或一些花哨的线条艺术,而这些艺术并不是我在源头上可以获得的东西我&#39 ;我在这里工作剪切和粘贴。

那么如何在地图上放置一个按钮。好吧,我可以这样做但是对于这个例子,按钮位于静态位置。 Pseudo infowindow您必须将按钮或图像移动到标记的坐标,并且可以将地图置于标记坐标的中心。

public boolean onMarkerClick (Marker marker)

就个人而言,当点击信息窗口时,我只需在整个屏幕上显示一个豪华的透明覆盖图。我的意思是用户必须以任何一种方式点击某些内容。

祝你好运 签 单击InfoWindow侦听器。