愿你出走半生,归来仍是少年!
瓦片图层是用于承载栅格数据进行展示的图层。由于其瓦片加载的方式,非常适合移动端进行大范围栅格信息的展示。
瓦片图层可根据与其搭配的数据提供器/数据源类型进行不同服务格式的呈现,具体的呈现放到第7部分细说,此处概略介绍瓦片图层的基础知识以及如何进行透明度设置。
TilesOverlay(MapTileProviderBase aTileProvider, Context aContext) |
|---|
TilesOverlay(MapTileProviderBase aTileProvider, Context aContext, boolean horizontalWrapEnabled, boolean verticalWrapEnabled) |
构造中需要传入数据提供器/数据源,可选的设置图层是否重复显示。
void | setHorizontalWrapEnabled(boolean horizontalWrapEnabled) |
|---|---|
void | setVerticalWrapEnabled(boolean verticalWrapEnabled) |
用于设置瓦片图层是否在横向火纵向进行平铺展示。
int | getMinimumZoomLevel() |
|---|---|
int | getMaximumZoomLevel() |
获取当前瓦片图层的最大以及最小的缩放等级。
int | getLoadingBackgroundColor() |
|---|---|
void | setLoadingBackgroundColor(int pLoadingBackgroundColor) |
获取或设置瓦片图层的背景颜色。若不设置默认为白色,咋瓦片无数据的地方将会呈现为白色,将会覆盖下方的图层造成遮盖,通常设置为透明。
- //背景透明
- setLoadingBackgroundColor(Color.TRANSPARENT);
瓦片图层作为栅格数据的呈现方式,通常会存在多个图层叠加观看使用的需求,透明度的实时调整是一个重要的功能。在TileOverlay中未提供直接变更图层透明度的方法,但是我们可以通过变更图层的ColorFilter进行功能实现。
void | setColorFilter(ColorFilter filter) |
|---|
以下为具体的实现过程:
- package spec.map.osm.overlayers.tiles;
-
- import android.content.Context;
- import android.graphics.Color;
- import android.graphics.ColorMatrix;
- import android.graphics.ColorMatrixColorFilter;
-
- import org.osmdroid.tileprovider.MapTileProviderBase;
- import org.osmdroid.views.overlay.TilesOverlay;
-
- import spec.map.osm.overlayers.IBasicLayer;
-
-
- /**
- * 瓦片图层
- */
- public class TileOverlayer extends TilesOverlay implements IBasicLayer {
-
- protected String name;
-
- protected String displayeName;
-
- /**
- * 颜色矩阵
- */
- protected ColorMatrix colorMatrix = new ColorMatrix();
-
- public TileOverlayer( MapTileProviderBase aTileProvider, Context aContext,String name,String displayeName) {
- super(aTileProvider, aContext,false,false);
-
- this.name=name;
- this.displayeName=displayeName;
-
-
-
- //设置为默认样式
- colorMatrix.set(new float[]{
- 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- });
-
- setColorFilter(new ColorMatrixColorFilter(colorMatrix));
-
- //不可平铺
- setVerticalWrapEnabled(false);
- setHorizontalWrapEnabled(false);
-
- //背景透明
- setLoadingBackgroundColor(Color.TRANSPARENT);
- }
-
-
- /**
- * 设置图层元名称
- * @param lyName
- */
- @Override
- public void setName(String lyName) {
- this.name = lyName;
- }
-
- /**
- * 获取图层元名称
- * @return
- */
- @Override
- public String getName() {
- return name;
- }
-
- /**
- * 设置图层显示名称
- * @param lyDisplayName
- */
- @Override
- public void setDisplayName(String lyDisplayName) {
- this.displayeName = lyDisplayName;
- }
-
- /**
- * 图层图层显示名称
- * @return
- */
- @Override
- public String getDisplayName() {
- return displayeName;
- }
-
-
- /**
- * 设置图层的透明度
- *
- * @param trans 透明度0-100
- */
- public void setTransparency(int trans) {
-
- colorMatrix.set(new float[]{
- 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, trans/100f, 0,
- });
-
-
- setColorFilter(new ColorMatrixColorFilter(colorMatrix));
-
- }
-
-
- /**
- * 获取图层当前的透明度 0-100
- *
- * @return
- */
- public int getTransparency() {
-
- var a = colorMatrix.getArray()[18];
-
- int result = Math.round(a * 100);
-
- return result;
- }
-
- /**
- * 获取瓦片的数据支撑
- * @return
- */
- public MapTileProviderBase getTileProvider(){
-
- return mTileProvider;
- }
-
-
- }