6.12.瓦片图层(TilesOverlay)
愿你出走半生,归来仍是少年!
瓦片图层是用于承载栅格数据进行展示的图层。由于其瓦片加载的方式,非常适合移动端进行大范围栅格信息的展示。
瓦片图层可根据与其搭配的数据提供器/数据源类型进行不同服务格式的呈现,具体的呈现放到第7部分细说,此处概略介绍瓦片图层的基础知识以及如何进行透明度设置。
1.构造
TilesOverlay(MapTileProviderBase aTileProvider, Context aContext) |
---|
TilesOverlay(MapTileProviderBase aTileProvider, Context aContext, boolean horizontalWrapEnabled, boolean verticalWrapEnabled) |
构造中需要传入数据提供器/数据源,可选的设置图层是否重复显示。
2. 常用方法
2.1.平铺
void | setHorizontalWrapEnabled(boolean horizontalWrapEnabled) |
---|---|
void | setVerticalWrapEnabled(boolean verticalWrapEnabled) |
用于设置瓦片图层是否在横向火纵向进行平铺展示。
2.2.缩放等级
int | getMinimumZoomLevel() |
---|---|
int | getMaximumZoomLevel() |
获取当前瓦片图层的最大以及最小的缩放等级。
2.3.背景色
int | getLoadingBackgroundColor() |
---|---|
void | setLoadingBackgroundColor(int pLoadingBackgroundColor) |
获取或设置瓦片图层的背景颜色。若不设置默认为白色,咋瓦片无数据的地方将会呈现为白色,将会覆盖下方的图层造成遮盖,通常设置为透明。
//背景透明setLoadingBackgroundColor(Color.TRANSPARENT);
3.图层透明度
瓦片图层作为栅格数据的呈现方式,通常会存在多个图层叠加观看使用的需求,透明度的实时调整是一个重要的功能。在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*/@Overridepublic void setName(String lyName) {this.name = lyName;}/*** 获取图层元名称* @return*/@Overridepublic String getName() {return name;}/*** 设置图层显示名称* @param lyDisplayName*/@Overridepublic void setDisplayName(String lyDisplayName) {this.displayeName = lyDisplayName;}/*** 图层图层显示名称* @return*/@Overridepublic 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;}}