版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34781711/article/details/82417985
其实一开始我是懵逼的
后来看了demo的源码才磕磕绊绊的做了出来。
线路规划属于Android地图SDK。
首先是流程,要有一个MainActivity主类,布局里面有MapView
、点击规划路线的按钮
以及显示规划结果布局
。
然后是一个设置规划样式的工具类。
首先:
布局的代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/shop_detail_title"
layout="@layout/common_title_layout" />
<Button
android:id="@+id/shop_detail_rode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/shop_detail_title"
android:text="规划路线" />
<com.amap.api.maps.MapView
android:id="@+id/g_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/shop_detail_rode" />
<RelativeLayout
android:id="@+id/bottom_layout"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_alignParentBottom="true"
android:background="@drawable/bg_bottom_bar"
android:gravity="center_vertical"
android:padding="5dp"
android:visibility="gone">
<TextView
android:id="@+id/firstline"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_marginLeft="12dp"
android:singleLine="true"
android:textColor="#333333"
android:textSize="16sp" />
<TextView
android:id="@+id/secondline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/firstline"
android:layout_marginLeft="12dp"
android:gravity="right"
android:singleLine="true"
android:textColor="#999999"
android:textSize="13sp"
android:visibility="gone" />
<LinearLayout
android:id="@+id/detail"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:text="详情"
android:textColor="@color/blue"
android:textSize="14sp" />
<Button
android:layout_width="7dp"
android:layout_height="13dp"
android:layout_marginLeft="4dp"
android:background="@drawable/arrow_right_blue"
android:gravity="center_vertical" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
我们现在有了规划路线的点击按钮、显示地图的MapView和显示规划文字详情结果bottom_layout。
下面构建MainActivity类。我就不贴完整的代码了,太麻烦,贴些核心的吧。
首先是声明一些必要的东西:
private AMap aMap;
private Context mContext;
// 搜索类
private RouteSearch mRouteSearch;
// 搜索结果类
private DriveRouteResult mDriveRouteResult;
// 起点
private LatLonPoint mStartPoint = new LatLonPoint(38.3066333311, 116.7742073536);
// 终点
private LatLonPoint mEndPoint = new LatLonPoint(39.3066333311, 116.7742073536);
众所周知,要重写生命周期的一些方法:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this.getApplicationContext();
mMapView.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}
然后是执行规划,当然了,实现一些监听接口:
if (aMap == null) {
aMap = mMapView.getMap();
}
// 注册监听
aMap.setOnMapClickListener(this);
aMap.setOnMarkerClickListener(this);
mRouteSearch = new RouteSearch(this);
mRouteSearch.setRouteSearchListener(this);
// 规划路线
RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(mStartPoint, mEndPoint);
// 起点终点,驾车模式,途径点,避让区域,避让道路
RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.DrivingDefault, null, null, "");
mRouteSearch.calculateDriveRouteAsyn(query);// 异步路线规划驾驶模式查询
到这里都不难,或者说不复杂。下面就是解析返回的规划结果。