これは私の最初の投稿なので、私の問題を十分に明確に説明したいと思います:
FragmentActivity クラスを拡張して、HeatMapActivity を作成しています。このアクティビティでは、次のように取得する GoogleMap オブジェクトを使用します。
// Try to obtain the map from the SupportMapFragment.
map = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.heatmap)).getMap();
ここで、null チェックなどを行った後、以下に示すように、setUpMap() メソッドに TileOverlay を追加しています。
// Configure and add overlay
tileProvider = new HeatMapTileProvider(map);
map.addTileOverlay(new TileOverlayOptions()
.tileProvider(tileProvider));
わかりました、これまでのところまったく問題ありません。ヒートマップ オーバーレイ用のタイルを提供するためにTileProviderインターフェイスを実装しました。
画面上のピクセルと緯度/経度の変換に 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 マニフェストに設定されます。
何か案は?ヘルプやヒントをいただければ幸いです。
セブ