Android 如何根据屏幕位置而不是地图位置定位信息窗口?
我的自定义信息窗口大于默认值。这意味着我必须在单击标记时降低地图的中心点,以便信息窗口将完全显示。问题是,由于我将地图位置向下移动了特定的纬度,当地图放大时,偏移量太大。相反,当我把镜头拉远时,它向下移动得不够。如何相对于屏幕高度定位信息窗口 屏幕的默认外观。X是infoWindow的锚Android 如何根据屏幕位置而不是地图位置定位信息窗口?,android,google-maps-android-api-2,infowindow,Android,Google Maps Android Api 2,Infowindow,我的自定义信息窗口大于默认值。这意味着我必须在单击标记时降低地图的中心点,以便信息窗口将完全显示。问题是,由于我将地图位置向下移动了特定的纬度,当地图放大时,偏移量太大。相反,当我把镜头拉远时,它向下移动得不够。如何相对于屏幕高度定位信息窗口 屏幕的默认外观。X是infoWindow的锚 |-----| |-----| |--X--| |-----| |-----| 我想要的:(无论缩放级别如何) 我要做的是: 1.)不要在标记中创建/添加默认信息窗口 2.)而是将事件处理程序(OnMarke
|-----|
|-----|
|--X--|
|-----|
|-----|
我想要的:(无论缩放级别如何)
我要做的是:
1.)不要在标记中创建/添加默认信息窗口
2.)而是将事件处理程序(OnMarkerClickListener)添加到标记中
3.)在clickhander中,在希望信息窗口出现的位置“计算”
例如,获取
Projection projection = map.getProjection(); // get map projection
VisibleRegion vr = projection.getVisibleRegion(); //
使用vr,您可以获得屏幕的左下角坐标。在那个角落加上几点,你就可以打电话了
LatLng infoLL = projection.fromScreenLocation(Point infoPoint);
获取信息窗口显示位置的坐标
4.)动态创建一个“虚拟标记”(例如一个像素图像),以便使用上面计算的位置(infoLL)不可见该标记
5.)将您的InfoWindow数据添加到其中
6.)立即在其中调用showInfoWindow()
7.)作为一个选项,向其中添加OnInfo WindowClickListener,以在单击时删除虚拟标记,或延迟删除,以降低地图在标记上的中心点。很抱歉,您丢失了默认的信息窗口实现。不要担心你的自定义信息窗口会很容易地移植到这个方法。这是一件非常好的事情来处理
onMarkerClick
,因为现在你的信息窗口可以处理链接到外部内容的按钮,信息窗口在谷歌地图应用程序上所做的任何事情,比如导航按钮,都可以在onMarkerClick()上通过弹出窗口或对话框片段来完成
遵循以下步骤
返回false从onMarkerClick事件中选择code>告诉android您的
处理标记
//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);}
享受地图的自定义静态信息窗口
如有任何问题或建议,请在下面的评论中告诉我我不确定是否完全理解此解决方案。信息窗口似乎不会出现在所选标记上;可能在它上面,或远高于它,尽管它正确居中。@Phiat这会起作用,但我很好奇,如果您试图移动地图,调用showinfowindow并在标记上方锚定一个infowindow,最后从onMarkerClick()返回false而不创建临时标记,这对用户来说是可行的。showinfowindow在文档中没有提到任何关于移动地图的内容,它肯定比下面我的解决方案和您的临时标记解决方案更简单。是的。我最终得到了我想要的结果,为每个缩放级别调整了不同数量的地图中心点。有点邋遢,但它符合我的要求。感谢你们的帮助和指导,你们都提供了有用的信息。这比其他解决方案更接近我所做的。尽管这两种方法都很有帮助。你能分享一些有用的演示或例子吗?你能分享一个完整的项目吗?我想在标记的右侧实现信息窗口。MapFragment中的TestFragment是什么?我无法使用此方法。您能进一步建议吗?
//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);}