使TileOverlays透明

8
我正在开发一款使用自定义TileSource在Google Maps上显示数据的应用程序。我以*.png图像的形式获取这些数据,并使用URLTileProvider。一切都运作得很好,但现在我正在尝试使TileLayer透明,或者至少部分透明。目标是让图层可见,但底下的Google Maps仍然可以看到。不知何故,我卡住了,因为我不知道如何实现这一点。
  • 我没有找到一种完全实现自定义TileProvider的方法,似乎只能扩展URLTileProvider
  • 服务器端的图像操作不可能,因为数据已经给定
  • 没有选项可以使TileOverlay透明?(alpha、opacity、transparency)
如果有人能指引我正确的方向,或告诉我Google Maps API V2 for Android是否真的不支持此功能,那就太好了。
2个回答

4

目前在Android Maps SDK V2中无法为TileOverlay指定透明度。不幸的是,setTransparency(float)方法仅适用于GroundOverlay。唯一的解决办法是实现自己的TileProvider并动态更改PNG文件的alpha通道来达到透明效果。


1
这是我最终的做法:我创建了自己的自定义TileProvider,通过从URL获取InputStream获取Tile,然后通过BitmapFactory.decodeByteArray生成位图以便使用此函数进行修改:
private Bitmap adjustOpacity(Bitmap bitmap)
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bmp = Bitmap.createBitmap(256, 256, conf); Canvas canvas = new Canvas(bmp);
Paint paint = new Paint();
paint.setAlpha(tileOpacity);
canvas.drawBitmap(bitmap, 0, 0, paint); return bmp;
}
- Elysium
我有一个类似的问题,就像Elysium一样,我也有我的TileProvider。但我发现在绘制后无法更改瓦片的透明度。您是否在绘制后随时使用"adjustOpacity"? - aez
你在调整透明度后是否将位图转换回字节数组?否则,你是如何从位图创建Tile以便由getTile()返回的?谢谢。 - paul
1
@Paul,是的,当你完成后,你需要将位图转换回字节数组。 - Pavel Dudka
2
我编写了一个自定义的TileProvider,它使用@Elysium的adjustOpacity()方法为我们完成所有这些操作。只需将自定义TileProvider插入URLTileProvider,设置透明度(如果所需的透明度不同于75%),然后您就可以开始使用了。在这里查看:http://blog.awnry.com/post/88749232734/changing-tileoverlay-opacity-for-androids-google-maps - The Awnry Bear
目前透明度功能已测试正常,可使用mMap.addTileOverlay(new TileOverlayOptions().tileProvider(new CustomMapTileProvider(getResources().getAssets())).transparency(0.5f))代码实现。 - Ajay

2

您能使瓷砖图像本身透明吗?如果图像具有alpha通道,则URLTileProvider可以指向任何图像,因此应该可以实现。

您可以直接实现TileProvider,但在这种情况下,您将必须自行加载自己的图像数据。如果您想在客户端动态生成瓦片,则似乎这更可取。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接