Android Google Maps v2 从资产中的图像加载 OverlayTile
Posted
技术标签:
【中文标题】Android Google Maps v2 从资产中的图像加载 OverlayTile【英文标题】:Android Google Maps v2 load OverlayTile from image in assets 【发布时间】:2014-07-01 21:42:53 【问题描述】:我需要获取我在本地存储在我的应用程序中的图像的文件 URL。我不在乎我在本地将文件存储在哪里,只是在某个可以获取它的 URL 的地方。我尝试了资产和资源,但没有成功。
我想要做的是覆盖 UrlTileProvider:
public class FileSystemTileProvider extends UrlTileProvider
public FileSystemTileProvider(int width, int height, String assestsDirectory)
super(width, height);
@Override
public URL getTileUrl(int x, int y, int z)
String tile = "file://<somewhere>/background.png";
URL fileUrl = null;
try
fileUrl = new URL(tile);
catch (MalformedURLException e)
// TODO Auto-generated catch block
e.printStackTrace();
return fileUrl;
我需要返回一个 URL 才能正常工作。我已经硬编码了一个文件 url,它确实有效。但是我需要一种方法来获取我的 background.png 图像的 URL。这可能吗?
【问题讨论】:
我认为文件 url 有 3 个斜杠 file:/// 在 phonegap 你可以使用类似 file:///android_asset/www/index.html 【参考方案1】:我认为你不能通过这种方式访问它。
但您可以改为直接实现 TileProvider 并编写自己的实现
public Tile getTile (int x, int y, int zoom)
//get the drawable
...
Bitmap bitmap = drawable.getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
return Tile(WIDTH, HEIGHT, stream.toByteArray());
从drawables文件夹中获取drawable:
Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.background);
或来自资产文件夹:
InputStream ins = getAssets().open("background.jpg");
Drawable d = Drawable.createFromStream(ins, null);
【讨论】:
正是我想要的。我在尝试做一个 UrlTileProvider 时被卡住了,不知道为什么我把它卡在了我的脑海中并且无法绕过它。谢谢。【参考方案2】:最简单的方法可能是将文件作为 asset 包含在 APK 中,然后使用 AssetManager 将其解压缩到应用的私有目录中。例如,如this answer 中所述,除了使用getFilesDir()
而不是getExternalFilesDir()
(或者更简单,通过使用openFileOutput()
创建FileOutputStream
对象)。
另一种选择(特别是如果您想要/需要为不同的显示密度提供不同的背景图像)是将其包含为可绘制对象,然后 extract it with a similar method。
在您完成其中任何一项后(仅一次,例如在主 Activity 启动时)并使用已知名称保存文件后,只需在该文件中创建 URL
。
File backgroundFile = new File(getFilesDir(), fileName);
URL fileUrl = backgroundFile.toURI().toURL();
【讨论】:
以上是关于Android Google Maps v2 从资产中的图像加载 OverlayTile的主要内容,如果未能解决你的问题,请参考以下文章
Google Maps Android API V2 检查 Google Maps 应用程序是不是被禁用
在 Google Maps Android SDK (v2) 中更改建筑物颜色