这是我在这里的第一篇文章,所以我希望我能清楚地解释一下我的问题:
我正在扩展FragmentActivity类以创建HeatMapActivity。在本 Activity 中,我使用一个GoogleMap对象,该对象如下所示:
// Try to obtain the map from the SupportMapFragment.
map = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.heatmap)).getMap();
现在,在执行空检查等之后,我在setUpMap()方法中添加了TileOverlay,如下所示:
// Configure and add overlay
tileProvider = new HeatMapTileProvider(map);
map.addTileOverlay(new TileOverlayOptions()
.tileProvider(tileProvider));
好的,到目前为止完全没有问题。我实现了TileProvider接口,以提供HeatMap叠加层的图块。
我想使用Projection对象在屏幕上的像素之间来回转换纬度/经度。应该通过GoogleMap类的getProjection()方法返回Projection对象。
现在是问题所在:如果我在HeatMapActivity类中使用以下代码,则一切都很好:
System.err.println("Test1: " + map.getProjection().fromScreenLocation(new Point(50, 50)));
但是,如果我将GoogleMap对象分别转发到TileProvider或我使用的渲染器,则代码不再起作用:
public byte[] render(int x, int y, int zoom, GoogleMap map) {
...
System.err.println("Test2: " + map);
System.err.println("Test3: " + map.getProjection().fromScreenLocation(new Point(50, 50)));
...
}
我绝对知道,map参数不是null(请参阅测试2),但是当我调用getProjection()时,代码似乎只是阻塞了。没有错误出现,如果我不使用Projection对象,其他所有工作都很好。我没有任何线索,为什么不应该让我从 Activity 之外的另一个类中调用getProjection()呢?
我正在使用Windows的ADT捆绑包(版本x86_64-20130729),Android SDK版本从8升级到17,目前正在Android 2.3.5上进行测试。显示地图,包括所需的库,并在android清单中设置权限。
有任何想法吗?任何帮助或提示表示赞赏。
塞布
最佳答案
这里的问题是getTile
(和您的render
方法)在UI线程之外被调用。
这将导致异常(您不会看到),因为异常可能是由调用getTile
的代码静默处理的。这真的很糟糕,它不会崩溃,因此有人可以在gmaps api问题上发布问题。
尝试将对getProjection
的调用包装在try-catch中以查看它。
因为您不应该在主线程之外与GoogleMap
交互,所以您将不得不寻找另一种实现方式,即您想要实现的目标...
无论如何,我可以想象没有充分的理由需要在getProjection
中调用getTile
。也许另一个问题描述了您的真正问题?