虚拟地图图块提供程序不起作用(未调用getTile)

Gio*_*esi 3 android offline map

我想使用Google Maps API v2,但仅在后台显示一个虚拟地图。这是我正在使用的PNG文件的示例,称为“ dummy_map_tile.png”。我将其放置在资产文件夹中名为“ images”的目录下。尺寸为256x256像素。还尝试了JPG类似文件。

我的虚拟地图图块:

这是我的虚拟地图图块提供程序的代码,当然应该可以离线使用:

public class DummyTileProvider implements TileProvider {

    protected Tile mDummyTile = null;

    public DummyTileProvider(Context context) {
        InputStream inputStream = null;
        ByteArrayOutputStream outputStream = null;
        try {
            String tileFilename = "images/dummy_map_tile.png";
            inputStream = context.getResources().getAssets().open(tileFilename);
            outputStream = new ByteArrayOutputStream();
            byte[] buffer = new byte[2048];
            int count;
            while((count = inputStream.read(buffer)) != -1)
                outputStream.write(buffer, 0, count);
            outputStream.flush();
            mDummyTile = new Tile(256, 256, outputStream.toByteArray());
        }
        catch (IOException e) {
            mDummyTile = null;
        }
        finally {
            if (inputStream != null)
                try {inputStream.close();} catch (IOException e) {}
            if (outputStream != null)
                try {outputStream.close();} catch (IOException e) {}
        }
    }

    @Override
    public Tile getTile(int x, int y, int zoom) {
        return mDummyTile;
    }
}
Run Code Online (Sandbox Code Playgroud)

一些日志记录(上面的代码中未显示)使我能够确保虚拟图块提供程序的构造正确,即没有发生IOException且mDummyTile不为null。

这是我在地图设置中设置图块提供程序的方式(mMap是我的GoogleMap对象,已正确初始化):

    mMap.setMapType(GoogleMap.MAP_TYPE_NONE);
    DummyTileProvider tileProvider = new DummyTileProvider(this);
    mMap.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider));
Run Code Online (Sandbox Code Playgroud)

不幸的是,地图根本没有显示。永远不会调用getTile方法。不过,我在地图上绘制的所有标记和其他内容均能正常工作。如果我删除上面的三行代码,从而使用默认的图块提供程序,则所有显示效果都很好,显示了标准的Google地图(仅在在线模式下)。谁能给我有用的提示?

Gio*_*esi 5

磁贴提供者没有错。只是代码其余部分中的一个错误,碰巧clear()在map对象上调用方法,因此从地图上删除了tile提供程序。不过,我希望虚拟磁贴提供程序的这个示例可以有用,所以我将其保留在此处。