1.简介
osmdroid是一个开源的地图填充器,全称是 open street map ,至于droid我个人认为应该是安卓版的后缀吧。
在网络上找了很多资料,大多是加载在线地图的,加载离线地图的很少,所以把代码记录一下。
2.初始化
1.在布局中添加地图控件
<org.osmdroid.views.MapView
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2.初始化地图
MapView map_view = (MapView) findViewById(R.id.map_view);
//设置地图是可点击的
map_view.setClickable(true);
//显示地图下方的缩放按钮
map_view.setBuiltInZoomControls(true);
mMapController = map_view.getController();
//设置初始化缩放级别
mMapController.setZoom(8);
//设置当前最大缩放级别
map_view.setMaxZoomLevel(8);
//添加比例尺
ScaleBarOverlay scaleBar = new ScaleBarOverlay(context);
map_view.getOverlays().add(scaleBar);
//初始化放大缩小控制器
initZoomController();
//设置中心点
mMapController.setCenter(new GeoPoint(34.5063810566, 122.9272579323));
/**
* 初始化放大缩小的处理 -- 对放大缩小方法进行监听
*/
private void initZoomController() {
Field f = null;
try {
f = map_view.getClass().getDeclaredField("mZoomController");//通过反射找到缩放的控制器
f.setAccessible(true);
Log.d(TAG, "zoomControllerClass--" + f.getGenericType().toString());
System.out.println("反射类中所有的方法");
Method[] fm = Class.forName("android.widget.ZoomButtonsController").getMethods();
for (int i = 0; i < fm.length; i++) {
if (fm[i].getName().equals("setOnZoomListener")) {
fm[i].setAccessible(true);
fm[i].invoke((ZoomButtonsController) f.get(map_view), new ZoomButtonsController.OnZoomListener() {
@Override
public void onVisibilityChanged(boolean b) {
}
@Override
public void onZoom(boolean b) {
if (b) {
map_view.getController().zoomIn();
} else {
map_view.getController().zoomOut();
}
zoom();//自己要处理的方法
}
});
}
System.out.println("fm:" + fm[i].getName() + "____"
+ fm[i].getReturnType().getName());
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (Cl