在app上调入高德地图SDK,想把地图样式改为自定义的样式。开发手册介绍得不太清楚,这里把详细步骤写一下:
要点
- 地图文件放在虚拟机路径
- 相关权限打开
(1)下载高德地图SDK并安装,接口配置,网上有很多介绍。这里不再详述。
(2)自定义地图创建地图样式
(3)发布与使用
创建好地图样式后,首先需要发布,然后点击使用与分享。选择Android,我这里下载的最新的SDK是7.0.0以后版本
(4)【重点】Android中应用
下载完成解压后会得到两个.data文件,开发文档里这样说
这里的路径指的是虚拟机里的路径! 不是本地电脑上的!!
我用的是雷电模拟器,打开文件管理器,直接拖入两个.data文件,不知道为什么会自动放在
路径下。我就懒得改了。
回到Android studio,在相应.java文件加入
//地图样式
aMap.setCustomMapStyle(
new com.amap.api.maps.model.CustomMapStyleOptions()
.setEnable(true)
.setStyleDataPath("/storage/emulated/0/Pictures/style.data")
.setStyleExtraPath("/storage/emulated/0/Pictures/style_extra.data")
);
重新运行应用,然后可能发现地图样式还是默认样式,没有变化!
要打开软件读取存储权限!!()
最后重新运行应用~成功啦!
完整代码见下
public class TrailFragment extends Fragment{
private MapView mMapView = null;
private AMap aMap = null;
public TrailFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_trail, container, false);
//获取地图空间引用
mMapView = (MapView) view.findViewById(R.id.map);
// 在acitivity执行OnCreate时执行mMapView.onCreate(savedInstanceState);
mMapView.onCreate(savedInstanceState);// 此方法必须重写
if (aMap == null) {
aMap = mMapView.getMap();
}
aMap.setCustomMapStyle(
new com.amap.api.maps.model.CustomMapStyleOptions()
.setEnable(true)
.setStyleDataPath("/storage/emulated/0/Pictures/style.data")
.setStyleExtraPath("/storage/emulated/0/Pictures/style_extra.data")
);
return view;
}
@Override
public void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
}
@Override
public void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}
@Override
public void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}