gpt4 book ai didi

android - Maps v2 信息窗口在触摸标记时不显示,但在触摸不可见的信息窗口后显示

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:37:19 24 4
gpt4 key购买 nike

我目前正在显示单个标记。触摸时不显示信息窗口。我已经确认标题实际上是在标记中设置的。

但是,如果我触摸信息窗口所在标记上方的区域,我会收到 OnInfoWindowClickListener 事件。发生这种情况时,我打开另一个 Activity ,当我从该 Activity 返回时,会显示信息窗口(实际上,我可以在 Activity 开始前一瞬间看到它正在显示)。

关于如何在触摸标记时显示信息窗口的任何提示?

这是我的相关代码:

// .... more code up here


final GoogleMap map = mMapFragment.getMap();

if (map == null) {
mReloadWhenReady = true;
return;
}

map.clear();

final TileProviderMapsV2 prov = new TileProviderMapsV2(mMapFragment.getActivity());
map.addTileOverlay(new TileOverlayOptions().tileProvider(prov));


final LatLngBounds.Builder bounds = new LatLngBounds.Builder();
final Map<Marker, MyNode> markerMap = J.newHashMap();
mNodes.clear();
mNodes.addAll(nodes);


L.p("Maps v2 nodes: %d. ", mNodes.size());



for (MyNode node : mNodes) {
final LatLng latlng = new LatLng(node.getLat(), node.getLon());
final MarkerOptions opts = new MarkerOptions()
.position(latlng)
.title("Title is " + node.getName())
.icon(BitmapDescriptorFactory
.fromResource(com.mydomain.droid.R.drawable.pin_blue));

final Marker m = map.addMarker(opts);
markerMap.put(m, node);
bounds.include(latlng);
}

map.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {

@Override
public void onInfoWindowClick(Marker marker) {
final MyNode node = markerMap.get(marker);
L.p("Maps v2 Clicked Node: %s/%d. ", node.getName(),node.getId());
ViewNode.Launchr.setNodeId(node.getId()).launch(mMapFragment.getActivity());
}
});

如果我在 for 循环中添加 m.showInfoWindow(); 标记显示信息窗口,但是将来会有更多标记,因此要求仅在触摸标记时显示信息窗口。

出于调试目的,我添加了以下代码,我在日志中看到了消息以及正确的标题,但我没有看到信息窗口:

map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

@Override
public boolean onMarkerClick(Marker marker) {
L.p("marker clicked " + marker.getTitle());
marker.showInfoWindow();
return false;
}
});

谢谢!

最佳答案

不确定您为什么会遇到此渲染问题,但我会给您一些可能会或可能不会解决问题的提示。

首先,您应该删除检查 map 是否准备就绪的 if block ,并删除 mReloadWhenReady 标志。初始化谷歌地图的正确方法是使用 map fragment 中的 getMapAsync

因此,在您的类中实现 GoogleMap.OnInfoWindowClickListenerOnMapReadyCallback 并执行以下操作来初始化、设置和使用 map 。

声明一个成员映射变量

private GoogleMap map = null;

然后在你的类中的某个地方初始化那个映射

mMapFragment.getMapAsync(this);

然后在那些重写的方法中写一些代码

 @Override
public void onMapReady(GoogleMap googleMap)
{
//here you can be sure the map is initialized correctly
this.map = googleMap;
//here we set the info window listener
map.setOnInfoWindowClickListener(this);
setupMap() //your custom method for doing whatever you want to do with the map see below
}

//Do your stuff on onInfoWindowClick as usual
@Override
public void onInfoWindowClick(Marker marker) {
final MyNode node = markerMap.get(marker);
L.p("Maps v2 Clicked Node: %s/%d. ", node.getName(),node.getId());
ViewNode.Launchr.setNodeId(node.getId()).launch(mMapFragment.getActivity());
}



private void setupMap()
{

map.clear();

final TileProviderMapsV2 prov = new TileProviderMapsV2(mMapFragment.getActivity());
map.addTileOverlay(new TileOverlayOptions().tileProvider(prov));


final LatLngBounds.Builder bounds = new LatLngBounds.Builder();
final Map<Marker, MyNode> markerMap = J.newHashMap();
mNodes.clear();
mNodes.addAll(nodes);


L.p("Maps v2 nodes: %d. ", mNodes.size());



for (MyNode node : mNodes) {
final LatLng latlng = new LatLng(node.getLat(), node.getLon());
final MarkerOptions opts = new MarkerOptions()
.position(latlng)
.title("Title is " + node.getName())
.icon(BitmapDescriptorFactory
.fromResource(com.mydomain.droid.R.drawable.pin_blue));

final Marker m = map.addMarker(opts);
markerMap.put(m, node);
bounds.include(latlng);
}

关于android - Maps v2 信息窗口在触摸标记时不显示,但在触摸不可见的信息窗口后显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34952105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com