我的自定义infoWindows大于默认值。这意味着我必须降低地图在点击标记时居中的点,以便完全显示infoWindow。问题是,由于我将地图位置向下移动特定的纬度,当地图近距离放大时,偏移量太大。相反,当我向远处缩放时,它不会向下移动。如何相对于屏幕高度定位infoWindow?
屏幕的默认外观。 X是infoWindow的锚点
|-----|
|-----|
|--X--|
|-----|
|-----|
我想要的:(无论缩放级别)
|-----|
|-----|
|-----|
|--X--|
|-----|
答案 0 :(得分:1)
我会做什么:
1。)不要在标记
中创建/添加默认的InfoWindow2。)而是将事件处理程序(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()上通过弹出窗口完成窗口或对话框片段。
请按照以下步骤操作。
mMap.setOnMarkerClickListener(this);
mMap.moveCamera(CameraUpdateFactory.newLatLng(markers newlat newlon));
return false;
告诉android你的
处理标记。注意,对于要使用默认地图信息窗口的标记,从onMarkerClick()返回true。
答案 2 :(得分:1)
我知道它已经老了但有点完成了问题但是在工作了4-5小时后,R& D终于在这个舞台上做了不同的事情。
在这种情况下,我使用片段而不是 infowindow 来提高可靠性。
首先点击以下链接:)
在这个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);}
享受地图的自定义静态信息窗口 如有任何问题或建议,请在下面的评论中告诉我