前言
項目中有使用到自定義建筑物局荚,然后就查看了官方Demo中,實現(xiàn)了所需要的功能。在此處做個筆記狭姨,引用官方代碼。
效果圖
初始地圖界面效果圖
添加自定義建筑物效果圖
改變建筑顏色效果圖
改變建筑物高度效果圖
完整代碼如下
package com.gaodemap.overlay;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BuildingOverlay;
import com.amap.api.maps.model.BuildingOverlayOptions;
import com.amap.api.maps.model.LatLng;
import com.gaodemap.R;
import java.util.ArrayList;
import java.util.List;
/**
* @author shixin
* @date 2018/6/1
*/
public class BuildingOverlayActivity extends Activity {
private MapView mapView;
private AMap map;
private BuildingOverlay buildingOverlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_building_overlay);
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
map = mapView.getMap();
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(39.922632, 116.391874), 17));
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onStop() {
super.onStop();
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
/**
* 添加自定義建筑物圖層
*
* @param view
*/
public void addBuildOverlay(View view) {
if (buildingOverlay == null) {
buildingOverlay = map.addBuildingOverlay();
map.showBuildings(false);
map.showMapText(false);
buildingOverlay.setVisible(true);
buildingOverlay.setCustomOptions(getOptions());
}
}
/**
* 改變默認默認區(qū)域的樓塊顏色苏遥。(不包括setCustomeOptions設(shè)置的自定義區(qū)域)
*
* @param view
*/
public void changeBuildingColor(View view) {
if (buildingOverlay != null) {
BuildingOverlayOptions newOption = buildingOverlay.getDefaultOptions().setBuildingTopColor(Color.GRAY);
buildingOverlay.setDefaultOptions(newOption);
}
}
/**
* 改變默認區(qū)域建筑的高度饼拍。(不包括setCustomeOptions設(shè)置的自定義區(qū)域)
*
* @param view
*
*/
public void changeBuildingHight(View view) {
if (buildingOverlay != null) {
BuildingOverlayOptions newOption = buildingOverlay.getDefaultOptions().setBuildingHeight(200);
buildingOverlay.setDefaultOptions(newOption);
}
}
public void destroyBuildOverlay(View view) {
if (buildingOverlay != null) {
buildingOverlay.destroy();
buildingOverlay = null;
}
}
/**
* 構(gòu)造故宮區(qū)域的樓塊顯示為頂部黃色,側(cè)面綠色
*
* @return
*/
private List<BuildingOverlayOptions> getOptions() {
/**
* 故宮
*/
BuildingOverlayOptions overlayOption = new BuildingOverlayOptions();
overlayOption.setBuildingTopColor(Color.YELLOW);
overlayOption.setBuildingSideColor(Color.GREEN);
List<LatLng> latLngs = new ArrayList();
/**
* 注意:傳入的點有順序要求暖眼,需要按照區(qū)域形狀的順時針依次傳入
*/
latLngs.add(new LatLng(39.922632, 116.391874));
latLngs.add(new LatLng(39.923126, 116.401637));
latLngs.add(new LatLng(39.913647, 116.402152));
latLngs.add(new LatLng(39.913252, 116.392668));
overlayOption.setBuildingLatlngs(latLngs);
List<BuildingOverlayOptions> list = new ArrayList();
list.add(overlayOption);
return list;
}
}