この機能を備えた TileProvider を実装したいと思います。
Map
を求めるTile
- TileProvider は、
Tile
オフラインで使用できるかどうかを確認します - もしそうなら、TileProvider は言ったを返します
Tile
- 可用性に関係なく、
TileProvider
オンラインで新しいタイルをチェックCache
し、外部ストレージにダウンロードします。 TileProvider
マップに新しいタイルを与え、マップはそれを更新します。
これは私の現在のUrlTileProvider
実装です:
public class MapBoxOnlineTileProvider extends UrlTileProvider {
private static final String[] FORMATS;
static {
final String[] servers = new String[] { "a", "b", "c", "d" };
final String[] formats = new String[servers.length];
for (int i = 0; i < servers.length; i++) {
formats[i] = String.format(
"%%s://%s.tiles.mapbox.com/v3/%%s/%%d/%%d/%%d.png",
servers[i]);
}
FORMATS = formats;
}
// ------------------------------------------------------------------------
// Instance Variables
// ------------------------------------------------------------------------
private String mMapIdentifier;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
public MapBoxOnlineTileProvider(final String mapIdentifier) {
super(256, 256);
this.mMapIdentifier = mapIdentifier;
}
// ------------------------------------------------------------------------
// Public Methods
// ------------------------------------------------------------------------
public String getMapIdentifier() {
return this.mMapIdentifier;
}
public void setMapIdentifier(final String anIdentifier) {
this.mMapIdentifier = anIdentifier;
}
@Override
public URL getTileUrl(final int x, final int y, final int z) {
final String f = FORMATS[new Random().nextInt(FORMATS.length)];
final String p = "http";
try {
return new URL(String.format(f, p, this.mMapIdentifier, z, x, y));
} catch (final MalformedURLException e) {
e.printStackTrace();
return null;
}
}
}
ただし、これはメモリにのみキャッシュするため、ユーザーがアプリを閉じるとキャッシュされず、Tiles
ダウンロードされる前にデフォルトの Google マップ マップが表示されます。
UrlTileProvider
getTile
として実装されてfinal
いるため、上書きできません。メソッドTileProvider
がなく、ソリューションを書き直すためのソース コードがありません。getTileURL
UrlTileProvider
これにどのようにアプローチすればよいですか?私がやりたいことをする方法はありますか?なぜgetTile
最終的なのですか?何か不足していますか?