ユーザーがGoogleマップの上に画像をロードできるアプリケーションがあります。これは2.3用に開発されたため、MapActivity、MapView、および画像を表示するカスタムOverlayクラスがあります。オーバーレイクラスのdraw-methodでは、毎回Matrixを再計算するため、画像は正しいサイズと位置になります。また、ユーザーが基準点をドラッグして画像を調整できるキャリブレーションモードもあります。
アプリケーションにいくつかの機能を追加し、フラグメントの使用などの更新から始めたいと思います。MapActivityをMapFragmentに置き換えると、自分で描画を実装できるオーバーレイがサポートされていないように見えるため、いくつかの疑問が生じます。GroundOverlaysまたはTileOverlayを使用する必要があるようです。(間違っている場合は訂正してください。)
これらはどちらも、追加後のオーバーレイの変更をサポートしていないようであるため、画像のキャリブレーションは機能しません。その部分の私の計画は、キャリブレーションモードのMapFragmentの上に通常のImageViewを配置することです。(これにより、すべてのマーカーが非表示になりますが、キャリブレーション中は関係ありません。)これを機能させるには、次の2つが必要です。*キャリブレーションポイントに影響するすべてのタッチイベントを受信し、残りを転送して通常のズームなどを可能にします。*いつでも検出できます。位置/回転/ズームレベルが変わるので、画像を調整できます。質問1:それに関する大きな問題は予想できますか?
次に、GroundOverlaysとTileOverlayのどちらが望ましいかを判断する必要があります。
GroundOverlay:画像全体をロードするので、これは最小限の作業で済むようです。また、画面の向きの変更なども自動的に処理できると思います。質問2:GroundOverlayは大きな画像(最大2000 * 2000ピクセル)でうまく機能しますか?関係する画像のコピーはありますか?画像が非常に大きいため、メモリ内に複数のコピーを保存する余裕はありません。
TileOverlay:ある意味、これは実際に必要な部分のみを使用し、後で複数のマップ画像ソースを同時に使用するためのサポートを導入できるため、より専門的なソリューションのように見えます。おそらく、事前にタイルを生成し、それぞれに個別のファイルを保存する必要があります。それをメモリに保持し、オンデマンドでタイルを作成すると、多くのメモリが必要になる可能性があります。(または、別のタイル提供サービスを作成することもできますが、それは少し汚いようです。)質問#3:タイルキャッシュが使用するメモリの量を制御できますか?通常の制限は適用されますか?キャッシュが使用を許可されているメモリの大部分を占めているという理由だけで、アプリケーションのどこかでメモリが不足したくありません。質問4:ドキュメントには、「他のオーバーレイとは異なり、マップが再作成された場合、これは、ファイルを再度読み取る必要があり、ロードの遅延が顕著になることを意味します。これを回避する良い方法はありますか?質問5:getTileが呼び出されてnullを返した場合(タイルはファイルに保存されており、読み取り中にUIスレッドをブロックしたくないため)、再度要求されるまでどのくらいかかりますか?(個々のタイルを手動でロードする方法はないようです。)質問6:1つのタイル画像の適切な画像解像度を(パフォーマンスと品質に関して)判断するにはどうすればよいですか?これは、ファイルを再度読み取る必要があり、ロードの遅延が顕著になることを意味します。これを回避する良い方法はありますか?質問5:getTileが呼び出されてnullを返した場合(タイルはファイルに保存されており、読み取り中にUIスレッドをブロックしたくないため)、再度要求されるまでどのくらいかかりますか?(個々のタイルを手動でロードする方法はないようです。)質問6:1つのタイル画像の適切な画像解像度を(パフォーマンスと品質に関して)判断するにはどうすればよいですか?