如何根据屏幕位置而不是地图位置来定位InfoWindows?

时间:2014-09-09 16:33:08

标签: android google-maps-android-api-2 infowindow

我的自定义infoWindows大于默认值。这意味着我必须降低地图在点击标记时居中的点,以便完全显示infoWindow。问题是,由于我将地图位置向下移动特定的纬度,当地图近距离放大时,偏移量太大。相反,当我向远处缩放时,它不会向下移动。如何相对于屏幕高度定位infoWindow?

屏幕的默认外观。 X是infoWindow的锚点

|-----|
|-----|
|--X--|
|-----|
|-----|

我想要的:(无论缩放级别)

|-----|
|-----|
|-----|
|--X--|
|-----|

3 个答案:

答案 0 :(得分:1)

我会做什么:

1。)不要在标记

中创建/添加默认的InfoWindow

2。)而是将事件处理程序(OnMarkerClickListener)添加到标记

3.)在该点击者中,"计算"你希望你的信息窗口出现在哪里

例如,获取

Projection projection = map.getProjection(); // get map projection
VisibleRegion vr = projection.getVisibleRegion(); //

使用vr,您可以获得屏幕的左下角坐标。在该角落添加几个点,您可以致电

LatLng infoLL = projection.fromScreenLocation(Point infoPoint);

获取InfoWindow显示位置的坐标

4。)创建一个"虚拟标记"在运行中(例如一个像素图像),使用您在上面计算的位置(infoLL)看不见它

5.)将InfoWindow数据添加到其中

6。)立即将showInfoWindow()调用到其中

7.。)作为一个选项,在其中添加一个OnInfoWindowClickListener,删除虚拟标记(如果单击)或延迟删除

答案 1 :(得分:1)

降低可以完成标记上的地图中心的点。抱歉,您放弃了默认信息窗口实施。 不要担心您的自定义信息窗口会轻松移植到此方法。处理onMarkerClick是一件非常好的事情,因为现在您的信息窗口可以处理链接到外部内容的按钮,信息窗口在谷歌地图应用程序上执行的任何操作,如导航按钮都可以在onMarkerClick()上通过弹出窗口完成窗口或对话框片段。

请按照以下步骤操作。

  1. 告诉您正在处理onMarkerClick的地图。 mMap.setOnMarkerClickListener(this);
  2. 将onMarkerClick(标记标记)覆盖为
  3. 显示一个弹出窗口 http://android-er.blogspot.com/2012/03/example-of-using-popupwindow.html 或对话片段。
  4. 移动地图,使标记位于屏幕底部。 计算新的lat lon涉及考虑变焦和北方向。 This library 会有所帮助。 mMap.moveCamera(CameraUpdateFactory.newLatLng(markers newlat newlon));
  5. 来自onMarkerClick事件的
  6. return false;告诉android你的 处理标记。
  7. 注意,对于要使用默认地图信息窗口的标记,从onMarkerClick()返回true。

答案 2 :(得分:1)

InfoWindows地图上的静态位置

我知道它已经老了但有点完成了问题但是在工作了4-5小时后,R& D终于在这个舞台上做了不同的事情。

在这种情况下,我使用片段而不是 infowindow 来提高可靠性。

首先点击以下链接:)

Sticky Infowindows

在这个Guist中我添加了3个文件

1)customeMapview..java link

这是自定义mapview在xml文件中使用它。

2)maps_fragment.xml link

我只是把我的Infowindow放在地图下面 如果你想要上侧,左侧,你可以用你的视角设置你的framlayout。确保你的framlayout上的 android:clickable =" true" cancle bottom map click。

3) MapsFragment.java link

首先 onMarkerClick 设置片段转换。

让我们在你的customMapview mapview.setCustomEventListener 里面移动

  

if(intersects){}

隐藏customInfo窗口的主要基本代码。

您可以在此处设置界面

 //custome listner to fetch data from Custom map view because map does't allow  anu touch/click listner 
public interface OnCustomEventListener {
    void onEvent(MotionEvent ev);}

享受地图的自定义静态信息窗口 如有任何问题或建议,请在下面的评论中告诉我