1. 程式人生 > >Android 高德地圖新增線段紋理

Android 高德地圖新增線段紋理

共享單車軌跡介面如:小黃車和摩拜單車介面佈局採用的是高德地圖,並且每個軌跡線段都是有對應的地圖紋理
首先,我們在高德地圖開發環境下進行地圖線段紋理開發需要明確幾個前提:

  • 線段新增紋理根據官方文件是在PolylienOptions 類中進行設定
  • PolylienOptions 類所在的包是:com.amap.api.maps.model.PolylineOptions;
  • 對於com.amap.api.maps2d.AMap所對應的AMap中也有一個PolylienOptions 類,但是該類不能進行紋理的設定

官方文件說明如下:

名稱 說明
setCustomTexture(BitmapDescriptor customTexture) 設定線段的紋理,建議紋理資源長寬均為2的n次方
setCustomTextureIndex(java.util.List custemTextureIndexs) 設定分段紋理index陣列
setCustomTextureList(java.util.List customTextureList) 設定分段紋理list
setDottedLine(boolean isDottedLine) 設定是否畫虛線,預設為false,畫實線
setUseTexture(boolean useTexture) 是否使用紋理貼圖
useGradient(boolean useGradient) 設定是否使用漸變色
visible(boolean isVisible) 設定線段的可見性
width(float width) 設定線段的寬度,單位畫素
zIndex(float zIndex) 設定線段Z軸的值

首先,你需要你自己的紋理圖。如下三個紋理圖片

藍色的紋理圖

綠色的紋理圖

紅色的紋理圖

程式碼開發:
將紋理圖片放置到Asset檔案目錄下面
工具類程式碼如下:

 /**
     * Created by adminZPH on 2017/4/14.
     * 設定線條中的紋理的方法
     * @return PolylineOptions
     * */
public static PolylineOptions GetPolylineOptions(){ //新增紋理圖片 List<BitmapDescriptor> textureList = new ArrayList<BitmapDescriptor>(); BitmapDescriptor mRedTexture = BitmapDescriptorFactory .fromAsset("icon_road_red_arrow.png"); BitmapDescriptor mBlueTexture = BitmapDescriptorFactory .fromAsset("icon_road_blue_arrow.png"); BitmapDescriptor mGreenTexture = BitmapDescriptorFactory .fromAsset("icon_road_green_arrow.png"); textureList.add(mRedTexture); textureList.add(mBlueTexture); textureList.add(mGreenTexture); // 新增紋理圖片對應的順序 List<Integer> textureIndexs = new ArrayList<Integer>(); textureIndexs.add(0); textureIndexs.add(1); textureIndexs.add(2); PolylineOptions polylienOptions=new PolylineOptions(); polylienOptions.setCustomTextureList(textureList); polylienOptions.setCustomTextureIndex(textureIndexs); polylienOptions.setUseTexture(true); polylienOptions.width(7.0f); return polylienOptions; }

上面方法用來返回一個polylienOptions,如果你有N個經緯度點的話,需要在地圖上兩兩連線新增紋理顯示,就可直接使用
比如:

   for (int i =0; i < a.size() - 1; ++i) {

            amap.addPolyline(GetPolylineOptions()).add(
                    new LatLng(a.get(i).getLatLonPoint().getLatitude(), a.get(i).getLatLonPoint().getLongitude()),
                    new LatLng(a.get(i + 1).getLatLonPoint().getLatitude(), a.get(i + 1).getLatLonPoint().getLongitude())
            );

        }

通過上述就可以實現,具體業務邏輯具體編寫。
這片海 2017.04.14 13:06