这是我在这里的第一篇文章,所以我希望我能够清楚地解释我的问题:
我正在扩展FragmentActivity类以创建一个HeatMapActivity。在此活动中,我使用GoogleMap对象,我获得如下:
// Try to obtain the map from the SupportMapFragment.
map = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.heatmap)).getMap();
现在,在执行null-Check等之后,我在setUpMap()方法中添加了TileOverlay,如下所示:
// Configure and add overlay
tileProvider = new HeatMapTileProvider(map);
map.addTileOverlay(new TileOverlayOptions()
.tileProvider(tileProvider));
好的,到目前为止没问题。我实现了TileProvider接口来为HeatMap覆盖提供切片。
我想使用Projection对象将纬度/经度转换为屏幕上的像素。 Projection对象应该由GoogleMap类的getProjection()方法返回。
所以现在问题是:如果我在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对象,其他一切工作正常。我没有任何线索,为什么不允许我从另一个类调用getProjection()而不是活动......
我正在使用Windows的ADT软件包(版本x86_64-20130729),Android SDK版本从8到17,目前在Android 2.3.5上进行测试。将显示地图,包含所需的库,并在android清单中设置权限。
有什么想法吗?任何帮助或提示都表示赞赏。
的Seb
答案 0 :(得分:2)
此处的问题是getTile
(以及您的render
方法)在UI线程外部调用。
这将导致异常,您将看不到它,因为它可能由调用getTile
的代码静默处理。这真的很糟糕它没有崩溃,所以有人可以在gmaps api问题上发布一个问题
尝试在try-catch中将调用包装到getProjection
以查看它。
因为你不应该在主线程之外与GoogleMap
交互,你必须找到另一种方法来实现,你想要实现的目标......
无论如何,我可以想象没有充分的理由需要在getProjection
中拨打getTile
。也许是另一个描述你真实问题的问题?