为什么做的网站在谷歌浏览器打不开,网站黑链怎么做的,网站的主题,wordpress短代码页面周一又来了#xff0c;我就接着上次的开发步骤#xff08;一#xff09;来吧#xff0c;继续把高德地图的相关简单功能分享一下 上次写到了第六步#xff0c;接着写第七步吧。 第七步#xff1a;定位 地图选点 路径规划 实时导航 以下是我的这个功能NaviMapActivity的…周一又来了我就接着上次的开发步骤一来吧继续把高德地图的相关简单功能分享一下 上次写到了第六步接着写第七步吧。 第七步定位 地图选点 路径规划 实时导航 以下是我的这个功能NaviMapActivity的页面布局文件 1 ?xml version1.0 encodingutf-8?2 RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/android3 android:layout_widthmatch_parent4 android:layout_heightmatch_parent 5 6 7 8 LinearLayout9 android:idid/navibarcontainer10 android:layout_widthmatch_parent11 android:layout_heightwrap_content12 android:orientationvertical 13 14 15 LinearLayout16 android:layout_widthmatch_parent17 android:layout_heightwrap_content18 android:orientationvertical 19 20 RelativeLayout21 android:layout_widthmatch_parent22 android:layout_heightwrap_content 23 24 TextView25 android:idid/navistarttext26 android:layout_widthwrap_content27 android:layout_heightwrap_content28 android:layout_marginLeftdimen/navibar_margin_left29 android:layout_marginRightdimen/margin_right30 android:paddingBottomdimen/margin_bottom31 android:paddingTopdimen/margin_top32 android:textstring/navi_start33 android:textColorcolor/black34 android:textSizedimen/navibar_text_size /35 36 AutoCompleteTextView37 android:idid/navi_start_edit38 android:layout_widthwrap_content39 android:layout_heightdimen/navibar_edit_height40 android:layout_alignParentRighttrue41 android:layout_marginRightdimen/navibar_margin_right42 android:layout_toRightOfid/navistarttext43 android:focusablefalse44 android:hintstring/mypoistion45 android:paddingBottomdimen/margin_bottom46 android:paddingTopdimen/margin_top47 android:textSizedimen/navibar_text_size 48 /AutoCompleteTextView49 50 ImageView51 android:idid/navi_start_image52 android:layout_widthwrap_content53 android:layout_heightdimen/navibar_edit_height54 android:layout_alignBottomid/navi_start_edit55 android:layout_alignRightid/navi_start_edit56 android:layout_alignTopid/navi_start_edit57 android:layout_marginLeft0dp58 android:layout_marginRightdimen/margin_right59 android:srcdrawable/downarrow /60 /RelativeLayout61 62 RelativeLayout63 android:layout_widthmatch_parent64 android:layout_heightwrap_content65 android:orientationhorizontal 66 67 TextView68 android:idid/naviendtext69 android:layout_widthwrap_content70 android:layout_heightwrap_content71 android:layout_marginLeftdimen/navibar_margin_left72 android:layout_marginRightdimen/margin_right73 android:textstring/navi_end74 android:textColorcolor/black75 android:textSizedimen/navibar_text_size /76 77 EditText78 android:idid/navi_end_edit79 android:layout_widthwrap_content80 android:layout_heightdimen/navibar_edit_height81 android:layout_alignParentRighttrue82 android:layout_marginRightdimen/navibar_margin_right83 android:layout_toRightOfid/naviendtext84 android:focusablefalse85 android:paddingBottomdimen/margin_bottom86 android:paddingTopdimen/margin_top87 android:textSizedimen/navibar_text_size 88 /EditText89 90 ImageView91 android:idid/navi_end_image92 android:layout_widthwrap_content93 android:layout_heightdimen/navibar_edit_height94 android:layout_alignBottomid/navi_end_edit95 android:layout_alignRightid/navi_end_edit96 android:layout_alignTopid/navi_end_edit97 android:layout_marginRightdimen/margin_right98 android:srcdrawable/downarrow /99 /RelativeLayout
100
101 RelativeLayout
102 android:layout_widthmatch_parent
103 android:layout_heightwrap_content
104
105 LinearLayout
106 android:layout_widthmatch_parent
107 android:layout_heightwrap_content
108 android:gravitycenter_horizontal
109 android:orientationhorizontal
110
111 Button
112 android:idid/navi_route_button
113 android:layout_widthwrap_content
114 android:layout_heightdimen/navibar_button_height
115 android:layout_marginRightdimen/navibar_margin_right
116 android:paddingBottomdimen/margin_bottom
117 android:paddingTopdimen/margin_top
118 android:textstring/navi_route /
119
120 Button
121 android:idid/navi_navi_button
122 android:layout_widthwrap_content
123 android:layout_heightdimen/navibar_button_height
124 android:layout_marginLeftdimen/navibar_margin_left
125 android:paddingBottomdimen/margin_bottom
126 android:paddingTopdimen/margin_top
127 android:textstring/navi_navi /
128 /LinearLayout
129 /RelativeLayout
130 /LinearLayout
131 /LinearLayout
132 !-- 引入布局文件 --
133 com.amap.api.maps.MapView
134 android:idid/map
135 android:layout_widthmatch_parent
136 android:layout_heightwrap_content
137 android:layout_alignParentBottomtrue
138 android:layout_belowid/navibarcontainer /
139 /RelativeLayout View Code 然后就是实现这个功能的代码 1 package com.oysd.activity;2 3 import java.util.ArrayList;4 import java.util.List;5 6 import android.app.Activity;7 import android.app.ProgressDialog;8 import android.content.Intent;9 import android.content.res.Resources;10 import android.graphics.BitmapFactory;11 import android.location.Location;12 import android.media.AudioManager;13 import android.os.Bundle;14 import android.text.InputType;15 import android.view.View;16 import android.view.View.OnClickListener;17 import android.widget.AdapterView;18 import android.widget.ArrayAdapter;19 import android.widget.AutoCompleteTextView;20 import android.widget.Button;21 import android.widget.EditText;22 import android.widget.ImageView;23 import android.widget.TextView;24 import android.widget.Toast;25 import android.widget.AdapterView.OnItemClickListener;26 27 import com.amap.api.location.AMapLocation;28 import com.amap.api.location.AMapLocationListener;29 import com.amap.api.location.LocationManagerProxy;30 import com.amap.api.location.LocationProviderProxy;31 import com.amap.api.maps.AMap;32 import com.amap.api.maps.MapView;33 import com.amap.api.maps.AMap.OnMapClickListener;34 import com.amap.api.maps.model.BitmapDescriptorFactory;35 import com.amap.api.maps.model.LatLng;36 import com.amap.api.maps.model.Marker;37 import com.amap.api.maps.model.MarkerOptions;38 import com.amap.api.navi.AMapNavi;39 import com.amap.api.navi.AMapNaviListener;40 import com.amap.api.navi.AMapNaviViewListener;41 import com.amap.api.navi.model.AMapNaviInfo;42 import com.amap.api.navi.model.AMapNaviLocation;43 import com.amap.api.navi.model.NaviInfo;44 import com.amap.api.navi.model.NaviLatLng;45 import com.oysd.Util.TTSController;46 import com.oysd.ouyangmap.R;47 import com.oysd.ouyangmap.R.drawable;48 import com.oysd.ouyangmap.R.id;49 import com.oysd.ouyangmap.R.layout;50 import com.oysd.ouyangmap.R.string;51 52 public class NaviMapActivity extends Activity implements AMapNaviViewListener, OnClickListener, OnMapClickListener {53 54 // --------------View基本控件---------------------55 private MapView mMapView;// 地图控件56 private AutoCompleteTextView mStartPointText;// 起点输入57 private EditText mEndPointText;// 终点输入58 private Button mRouteButton;// 路径规划按钮59 private Button mNaviButton;// 模拟导航按钮60 private ProgressDialog mProgressDialog;// 路径规划过程显示状态61 private ProgressDialog mGPSProgressDialog;// GPS过程显示状态62 private ImageView mStartImage;// 起点下拉按钮63 private ImageView mEndImage;// 终点点击按钮64 65 // 地图和导航核心逻辑类66 private AMap mAmap;67 private AMapNavi mAmapNavi;68 69 // ---------------------变量---------------------70 private String[] mPositionMethods;// 记录起点我的位置、地图点选数组71 72 // 驾车路径规划起点途经点终点的list73 private ListNaviLatLng mStartPoints new ArrayListNaviLatLng();74 private ListNaviLatLng mWayPoints new ArrayListNaviLatLng();75 private ListNaviLatLng mEndPoints new ArrayListNaviLatLng();76 77 // 记录起点、终点、途经点位置78 private NaviLatLng mStartPoint new NaviLatLng();79 private NaviLatLng mEndPoint new NaviLatLng();80 private NaviLatLng mWayPoint new NaviLatLng();81 82 83 // 记录起点、终点、途经点在地图上添加的Marker84 private Marker mStartMarker;85 private Marker mWayMarker;86 private Marker mEndMarker;87 private Marker mGPSMarker;88 89 private boolean mIsGetGPS false;// 记录GPS定位是否成功90 private boolean mIsStart false;// 记录是否已我的位置发起路径规划91 92 private ArrayAdapterString mPositionAdapter;93 94 private AMapNaviListener mAmapNaviListener;95 96 // 记录地图点击事件相应情况根据选择不同地图响应不同97 private int mMapClickMode MAP_CLICK_NO;98 private static final int MAP_CLICK_NO 0;// 地图不接受点击事件99 private static final int MAP_CLICK_START 1;// 地图点击设置起点
100 private static final int MAP_CLICK_WAY 2;// 地图点击设置途经点
101 private static final int MAP_CLICK_END 3;// 地图点击设置终点
102 // 记录导航种类用于记录当前选择是驾车还是步行
103 private int mTravelMethod WALK_NAVI_METHOD;
104 private static final int WALK_NAVI_METHOD 1;// 步行导航
105
106
107 private int mNaviMethod;
108 private static final int NAVI_METHOD 0;// 执行模拟导航操作
109 private static final int ROUTE_METHOD 1;// 执行计算线路操作
110
111 private int mStartPointMethod BY_MY_POSITION;
112 private static final int BY_MY_POSITION 0;// 以我的位置作为起点
113 private static final int BY_MAP_POSITION 1;// 以地图点选的点为起点
114 // 计算路的状态
115 private final static int GPSNO 0;// 使用我的位置进行计算、GPS定位还未成功状态
116 private final static int CALCULATEERROR 1;// 启动路径计算失败状态
117 private final static int CALCULATESUCCESS 2;// 启动路径计算成功状态
118
119 //定位
120 private LocationManagerProxy mLocationManger;
121
122
123 private AMapLocationListener mLocationListenernew AMapLocationListener() {
124
125 Override
126 public void onStatusChanged(String provider, int status, Bundle extras) {
127 // TODO Auto-generated method stub
128
129 }
130
131 Override
132 public void onProviderEnabled(String provider) {
133 // TODO Auto-generated method stub
134
135 }
136
137 Override
138 public void onProviderDisabled(String provider) {
139 // TODO Auto-generated method stub
140
141 }
142
143 Override
144 public void onLocationChanged(Location location) {
145 // TODO Auto-generated method stub
146
147 }
148
149 Override
150 public void onLocationChanged(AMapLocation location) {
151 if (location!nulllocation.getAMapException().getErrorCode() 0) {
152 mIsGetGPS true;
153 mStartPoint new NaviLatLng(location.getLatitude(), location.getLongitude());
154
155
156 mGPSMarker.setPosition(new LatLng(
157 mStartPoint.getLatitude(), mStartPoint
158 .getLongitude()));
159 mStartPoints.clear();
160 mStartPoints.add(mStartPoint);
161
162 dissmissGPSProgressDialog();
163
164 calculateRoute();
165
166
167
168 }
169 else{
170 showToast(定位出现异常);
171 }
172 }
173 };
174
175 Override
176 protected void onCreate(Bundle savedInstanceState) {
177 // TODO Auto-generated method stub
178 super.onCreate(savedInstanceState);
179 setContentView(R.layout.activity_navimap);
180 // 初始化所需资源、控件、事件监听
181 initResources();
182 initView(savedInstanceState);
183 initListener();
184 initMapAndNavi();
185 //MainApplication.getInstance().addActivity(this);
186 }
187
188
189 /**
190 * 初始化地图和导航相关内容
191 */
192 private void initMapAndNavi() {
193 // 初始语音播报资源
194 setVolumeControlStream(AudioManager.STREAM_MUSIC);// 设置声音控制
195 //语音播报开始
196
197 mAmapNavi AMapNavi.getInstance(this);// 初始化导航引擎
198
199 // 初始化Marker添加到地图
200 mStartMarker mAmap.addMarker(new MarkerOptions()
201 .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
202 .decodeResource(getResources(), R.drawable.start))));
203 mWayMarker mAmap.addMarker(new MarkerOptions()
204 .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
205 .decodeResource(getResources(), R.drawable.way))));
206 mEndMarker mAmap.addMarker(new MarkerOptions()
207 .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
208 .decodeResource(getResources(), R.drawable.end))));
209 mGPSMarker mAmap.addMarker(new MarkerOptions()
210 .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
211 .decodeResource(getResources(),
212 R.drawable.location_marker))));
213 }
214 /**
215 * 初始化资源文件主要是字符串
216 */
217 private void initResources() {
218 Resources res getResources();
219 mPositionMethods new String[] { res.getString(R.string.mypoistion),
220 res.getString(R.string.mappoistion) };
221
222 }
223
224 /**
225 * 初始化界面所需View控件
226 *
227 * param savedInstanceState
228 */
229 private void initView(Bundle savedInstanceState) {
230 mMapView (MapView) findViewById(R.id.map);
231 mMapView.onCreate(savedInstanceState);
232 mAmapmMapView.getMap();
233 mStartPointText (AutoCompleteTextView) findViewById(R.id.navi_start_edit);
234
235 mStartPointText
236 .setDropDownBackgroundResource(R.drawable.whitedownborder);
237 mEndPointText (EditText) findViewById(R.id.navi_end_edit);
238 mStartPointText.setInputType(InputType.TYPE_NULL);
239 mEndPointText.setInputType(InputType.TYPE_NULL);
240
241 mPositionAdapter new ArrayAdapterString(this,
242 R.layout.strategy_inputs, mPositionMethods);
243
244 mStartPointText.setAdapter(mPositionAdapter);
245
246 mRouteButton (Button) findViewById(R.id.navi_route_button);
247 mNaviButton (Button) findViewById(R.id.navi_navi_button);
248 mStartImage (ImageView) findViewById(R.id.navi_start_image);
249 mEndImage (ImageView) findViewById(R.id.navi_end_image);
250
251 TTSController ttsManager TTSController.getInstance(this);// 初始化语音模块
252 ttsManager.init();
253 AMapNavi.getInstance(this).setAMapNaviListener(ttsManager);// 设置语音模块播报
254 }
255
256 /**
257 * 初始化所需监听
258 */
259 private void initListener() {
260 // 控件点击事件
261 mStartPointText.setOnClickListener(this);
262 mEndPointText.setOnClickListener(this);
263 mRouteButton.setOnClickListener(this);
264 mNaviButton.setOnClickListener(this);
265 mStartImage.setOnClickListener(this);
266 mEndImage.setOnClickListener(this);
267 // 设置地图点击事件
268 mAmap.setOnMapClickListener(this);
269 // 起点下拉框点击事件监听
270 mStartPointText.setOnItemClickListener(getOnItemClickListener());
271 }
272
273 /**
274 * 起点下拉框点击事件监听
275 * */
276 private OnItemClickListener getOnItemClickListener() {
277 return new OnItemClickListener() {
278 Override
279 public void onItemClick(AdapterView? arg0, View arg1, int index,
280 long arg3) {
281 switch (index) {
282 // 我的位置为起点进行导航或路径规划
283 case 0:
284 mStartPointMethod BY_MY_POSITION;
285 break;
286 // 地图点选起点进行导航或路径规划
287 case 1:
288 mStartPointMethod BY_MAP_POSITION;
289 mMapClickMode MAP_CLICK_START;
290 showToast(点击地图添加起点);
291 break;
292 }
293
294 }
295
296 };
297 }
298
299 // ---------------UI操作----------------
300 private void showToast(String message) {
301 Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
302 }
303
304 private void setTextDescription(TextView view, String description) {
305 view.setText(description);
306 }
307
308
309 /**
310 * 地图点击事件监听
311 * */
312 Override
313 public void onMapClick(LatLng latLng) {
314 // 默认不接受任何操作
315 if (mMapClickMode MAP_CLICK_NO) {
316 return;
317 }
318 // 其他情况根据起点、途经点、终点不同逻辑处理不同
319 addPointToMap(latLng);
320
321 }
322
323 /**
324 * 地图点击事件核心处理逻辑
325 * param position
326 */
327 private void addPointToMap(LatLng position) {
328 NaviLatLng naviLatLng new NaviLatLng(position.latitude,
329 position.longitude);
330 switch (mMapClickMode) {
331 //起点
332 case MAP_CLICK_START:
333 mStartMarker.setPosition(position);
334 mStartPoint naviLatLng;
335 mStartPoints.clear();
336 mStartPoints.add(mStartPoint);
337 setTextDescription(mStartPointText, 已成功设置起点);
338 break;
339 //终点
340 case MAP_CLICK_END:
341 mEndMarker.setPosition(position);
342 mEndPoints.clear();
343 mEndPoint naviLatLng;
344 mEndPoints.add(mEndPoint);
345 setTextDescription(mEndPointText, 已成功设置终点);
346 break;
347 }
348
349 }
350
351 Override
352 public void onClick(View v) {
353 // TODO Auto-generated method stub
354 switch (v.getId()) {
355 // 路径规划按钮处理事件
356 case R.id.navi_route_button:
357 mNaviMethod ROUTE_METHOD;
358 calculateRoute();
359 break;
360 // 模拟导航处理事件
361 case R.id.navi_navi_button:
362 mNaviMethod NAVI_METHOD;
363 calculateRoute();
364 break;
365 // 起点点击事件
366 case R.id.navi_start_image:
367 case R.id.navi_start_edit:
368 setTextDescription(mStartPointText, null);
369 mPositionAdapter new ArrayAdapterString(this,
370 R.layout.strategy_inputs, mPositionMethods);
371 mStartPointText.setAdapter(mPositionAdapter);
372 mStartPoints.clear();
373 mStartMarker.setPosition(null);
374 mStartPointText.showDropDown();
375 break;
376 // 终点点击事件
377 case R.id.navi_end_image:
378 case R.id.navi_end_edit:
379 mMapClickMode MAP_CLICK_END;
380 mEndPoints.clear();
381 mEndMarker.setPosition(null);
382 setTextDescription(mEndPointText, 点击地图设置终点);
383 showToast(点击地图添加终点);
384 break;
385 }
386 }
387
388 Override
389 public void onLockMap(boolean arg0) {
390 // TODO Auto-generated method stub
391
392 }
393
394 Override
395 public void onNaviCancel() {
396 // TODO Auto-generated method stub
397
398 }
399
400 Override
401 public void onNaviMapMode(int arg0) {
402 // TODO Auto-generated method stub
403
404 }
405
406 Override
407 public void onNaviSetting() {
408 // TODO Auto-generated method stub
409
410 }
411
412 Override
413 public void onNaviTurnClick() {
414 // TODO Auto-generated method stub
415
416 }
417
418 Override
419 public void onNextRoadClick() {
420 // TODO Auto-generated method stub
421
422 }
423
424 Override
425 public void onScanViewButtonClick() {
426 // TODO Auto-generated method stub
427
428 }
429
430 /**
431 * 算路的方法根据选择可以进行行车和步行两种方式进行路径规划
432 */
433 private void calculateRoute() {
434 if(mStartPointMethodBY_MY_POSITION!mIsGetGPS){
435 mLocationMangerLocationManagerProxy.getInstance(this);
436 //进行一次定位
437 mLocationManger.requestLocationData(LocationProviderProxy.AMapNetwork, -1, 15, mLocationListener);
438 showGPSProgressDialog();
439
440
441 return;
442
443 }
444 mIsGetGPSfalse;
445 switch (mTravelMethod) {
446 // 步行导航
447 case WALK_NAVI_METHOD:
448 int walkIndex calculateWalkRoute();
449 if (walkIndex CALCULATEERROR) {
450 showToast(路线计算失败,检查参数情况);
451 return;
452 } else if (walkIndex GPSNO) {
453 return;
454 }
455 break;
456 }
457 // 显示路径规划的窗体
458 showProgressDialog();
459 }
460
461
462
463 /**
464 * 导航回调函数
465 *
466 * return
467 */
468 private AMapNaviListener getAMapNaviListener() {
469 if (mAmapNaviListener null) {
470
471 mAmapNaviListener new AMapNaviListener() {
472
473 Override
474 public void onTrafficStatusUpdate() {
475 // TODO Auto-generated method stub
476
477 }
478
479 Override
480 public void onStartNavi(int arg0) {
481 // TODO Auto-generated method stub
482
483 }
484
485 Override
486 public void onReCalculateRouteForYaw() {
487 // TODO Auto-generated method stub
488
489 }
490
491 Override
492 public void onReCalculateRouteForTrafficJam() {
493 // TODO Auto-generated method stub
494
495 }
496
497 Override
498 public void onLocationChange(AMapNaviLocation location) {
499
500
501 }
502
503 Override
504 public void onInitNaviSuccess() {
505 // TODO Auto-generated method stub
506
507 }
508
509 Override
510 public void onInitNaviFailure() {
511 // TODO Auto-generated method stub
512
513 }
514
515 Override
516 public void onGetNavigationText(int arg0, String arg1) {
517 // TODO Auto-generated method stub
518
519 }
520
521 Override
522 public void onEndEmulatorNavi() {
523 // TODO Auto-generated method stub
524
525 }
526
527 Override
528 public void onCalculateRouteSuccess() {
529 dissmissProgressDialog();
530 switch (mNaviMethod) {
531 //路径规划
532 case ROUTE_METHOD:
533 Intent intent new Intent(NaviMapActivity.this,
534 NaviRouteActivity.class);
535 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
536 startActivity(intent);
537
538 break;
539 //模拟导航
540 case NAVI_METHOD:
541 Intent standIntent new Intent(NaviMapActivity.this,
542 NaviCustomActivity.class);
543 standIntent
544 .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
545 startActivity(standIntent);
546 break;
547 }
548 }
549
550 Override
551 public void onCalculateRouteFailure(int arg0) {
552 dissmissProgressDialog();
553 showToast(路径规划出错);
554 }
555
556 Override
557 public void onArrivedWayPoint(int arg0) {
558 // TODO Auto-generated method stub
559
560 }
561
562 Override
563 public void onArriveDestination() {
564 // TODO Auto-generated method stub
565
566 }
567
568 Override
569 public void onGpsOpenStatus(boolean arg0) {
570 // TODO Auto-generated method stub
571
572 }
573
574 Override
575 public void onNaviInfoUpdated(AMapNaviInfo arg0) {
576 // TODO Auto-generated method stub
577
578 }
579
580 Override
581 public void onNaviInfoUpdate(NaviInfo arg0) {
582
583 // TODO Auto-generated method stub
584
585 }
586 };
587 }
588 return mAmapNaviListener;
589 }
590
591
592 /**
593 * 显示GPS进度框
594 */
595 private void showGPSProgressDialog() {
596 if (mGPSProgressDialog null)
597 mGPSProgressDialog new ProgressDialog(this);
598 mGPSProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
599 mGPSProgressDialog.setIndeterminate(false);
600 mGPSProgressDialog.setCancelable(true);
601 mGPSProgressDialog.setMessage(定位中...);
602 mGPSProgressDialog.show();
603 }
604
605 /**
606 * 隐藏进度框
607 */
608 private void dissmissGPSProgressDialog() {
609 if (mGPSProgressDialog ! null) {
610 mGPSProgressDialog.dismiss();
611 }
612 }
613
614 /**
615 * 显示进度框
616 */
617 private void showProgressDialog() {
618 if (mProgressDialog null)
619 mProgressDialog new ProgressDialog(this);
620 mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
621 mProgressDialog.setIndeterminate(false);
622 mProgressDialog.setCancelable(true);
623 mProgressDialog.setMessage(线路规划中);
624 mProgressDialog.show();
625 }
626
627 /**
628 * 对步行路线进行规划
629 */
630 private int calculateWalkRoute() {
631 int code CALCULATEERROR;
632 if (mAmapNavi.calculateWalkRoute(mStartPoint, mEndPoint)) {
633 code CALCULATESUCCESS;
634 } else {
635
636 code CALCULATEERROR;
637 }
638
639 return code;
640 }
641
642 /**
643 * 隐藏进度框
644 */
645 private void dissmissProgressDialog() {
646 if (mProgressDialog ! null) {
647 mProgressDialog.dismiss();
648 }
649 }
650
651 // -------------生命周期必须重写方法----------------
652 Override
653 protected void onSaveInstanceState(Bundle outState) {
654 super.onSaveInstanceState(outState);
655 mMapView.onSaveInstanceState(outState);
656 }
657 Override
658 public void onResume() {
659 super.onResume();
660 mMapView.onResume();
661 // 以上两句必须重写
662 // 以下两句逻辑是为了保证进入首页开启定位和加入导航回调
663 AMapNavi.getInstance(this).setAMapNaviListener(getAMapNaviListener());
664 mAmapNavi.startGPS();
665 TTSController.getInstance(this).startSpeaking();
666 }
667
668 Override
669 public void onPause() {
670 super.onPause();
671 mMapView.onPause();
672 // 以上两句必须重写
673 // 下边逻辑是移除监听
674 AMapNavi.getInstance(this)
675 .removeAMapNaviListener(getAMapNaviListener());
676 }
677
678 Override
679 public void onDestroy() {
680 super.onDestroy();
681 mMapView.onDestroy();
682
683
684
685 }
686 } View Code 当用户选择路径规划的时候会跳转到NaviRouteActivity,以下是其布局文件 1 ?xml version1.0 encodingutf-8?2 LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android3 android:layout_widthmatch_parent4 android:layout_heightmatch_parent5 android:backgroundcolor/grey6 android:orientationvertical 7 8 LinearLayout9 android:layout_widthmatch_parent10 android:layout_heightwrap_content11 android:backgrounddrawable/border 12 13 ImageView14 android:idid/route_back_view15 android:layout_widthwrap_content16 android:layout_heightwrap_content17 android:layout_marginBottomdimen/margin_bottom18 android:layout_marginTopdimen/margin_top19 android:srcdrawable/back_top /20 21 TextView22 android:layout_widthwrap_content23 android:layout_heightwrap_content24 android:layout_marginBottomdimen/margin_bottom25 android:layout_marginTopdimen/margin_top26 android:layout_weight127 android:gravitycenter_horizontal28 android:textstring/routeshow29 android:textColorcolor/black30 android:textSizedimen/titletext_size /31 /LinearLayout32 33 LinearLayout34 android:layout_widthmatch_parent35 android:layout_heightwrap_content36 android:layout_weight137 android:backgrounddrawable/border 38 39 com.amap.api.maps.MapView40 android:idid/routemap41 android:layout_widthmatch_parent42 android:layout_heightmatch_parent /43 /LinearLayout44 45 LinearLayout46 android:layout_widthmatch_parent47 android:layout_heightwrap_content 48 49 TextView50 android:layout_widthwrap_content51 android:layout_heightwrap_content52 android:layout_gravitycenter_horizontal53 android:paddingBottomdimen/margin_bottom54 android:paddingLeftdimen/margin_left55 android:paddingTopdimen/margin_top56 android:textstring/routeinfo_157 android:textColorcolor/black58 android:textSizedimen/route_text_size /59 60 TextView61 android:idid/navi_route_distance62 android:layout_widthwrap_content63 android:layout_heightwrap_content64 android:layout_gravitycenter_horizontal65 android:paddingBottomdimen/margin_bottom66 android:paddingLeftdimen/margin_left67 android:paddingTopdimen/margin_top68 android:textstring/routeinfo_default69 android:textColorcolor/red70 android:textSizedimen/route_text_size /71 72 TextView73 android:layout_widthwrap_content74 android:layout_heightwrap_content75 android:layout_gravitycenter_horizontal76 android:paddingBottomdimen/margin_bottom77 android:paddingTopdimen/margin_top78 android:textstring/routeinfo_279 android:textColorcolor/black80 android:textSizedimen/route_text_size /81 82 TextView83 android:idid/navi_route_time84 android:layout_widthwrap_content85 android:layout_heightwrap_content86 android:layout_gravitycenter_horizontal87 android:paddingBottomdimen/margin_bottom88 android:paddingLeftdimen/margin_left89 android:paddingTopdimen/margin_top90 android:textstring/routeinfo_default91 android:textColorcolor/red92 android:textSizedimen/route_text_size /93 94 TextView95 android:idid/navi_route_cost_before96 android:layout_widthwrap_content97 android:layout_heightwrap_content98 android:layout_gravitycenter_horizontal99 android:paddingBottomdimen/margin_bottom
100 android:paddingTopdimen/margin_top
101 android:textstring/routeinfo_3
102 android:textColorcolor/black
103 android:textSizedimen/route_text_size /
104
105 TextView
106 android:idid/navi_route_cost
107 android:layout_widthwrap_content
108 android:layout_heightwrap_content
109 android:layout_gravitycenter_horizontal
110 android:paddingBottomdimen/margin_bottom
111 android:paddingLeftdimen/margin_left
112 android:paddingTopdimen/margin_top
113 android:textstring/routeinfo_default
114 android:textColorcolor/red
115 android:singleLinetrue
116 android:textSizedimen/route_text_size /
117
118 TextView
119 android:idid/navi_route_cost_after
120 android:layout_widthwrap_content
121 android:layout_heightwrap_content
122 android:layout_gravitycenter_horizontal
123 android:paddingBottomdimen/margin_bottom
124 android:paddingTopdimen/margin_top
125 android:textstring/routeinfo_4
126 android:textColorcolor/black
127 android:textSizedimen/route_text_size /
128 /LinearLayout
129
130 RelativeLayout
131 android:layout_widthmatch_parent
132 android:layout_heightwrap_content
133
134 Button
135 android:idid/routestartnavi
136 android:layout_widthwrap_content
137 android:layout_heightdimen/naviroute_navi_height
138 android:layout_alignParentRighttrue
139 android:textstring/start_navi_navi /
140
141 AutoCompleteTextView
142 android:idid/navi_theme_text
143 android:layout_widthwrap_content
144 android:layout_heightdimen/naviroute_navi_height
145 android:layout_alignParentLefttrue
146 android:layout_toLeftOfid/routestartnavi
147 android:focusablefalse
148 android:hintstring/theme_blue
149 /AutoCompleteTextView
150
151 ImageView
152 android:idid/navi_theme_image
153 android:layout_widthwrap_content
154 android:layout_heightdimen/naviroute_navi_height
155 android:layout_alignBottomid/navi_theme_text
156 android:layout_alignRightid/navi_theme_text
157 android:layout_alignTopid/navi_theme_text
158 android:layout_marginRightdimen/margin_right
159 android:srcdrawable/downarrow /
160 /RelativeLayout
161
162 /LinearLayout View Code 紧接着是其实现代码主要来自高德API官网 1 package com.oysd.activity;2 3 import android.app.Activity;4 import android.content.Intent;5 import android.content.res.Resources;6 import android.os.Bundle;7 import android.text.InputType;8 import android.view.KeyEvent;9 import android.view.View;10 import android.view.View.OnClickListener;11 import android.widget.ArrayAdapter;12 import android.widget.AutoCompleteTextView;13 import android.widget.Button;14 import android.widget.ImageView;15 import android.widget.TextView;16 17 import com.amap.api.maps.AMap;18 import com.amap.api.maps.MapView;19 import com.amap.api.maps.AMap.OnMapLoadedListener;20 import com.amap.api.navi.AMapNavi;21 import com.amap.api.navi.AMapNaviViewOptions;22 import com.amap.api.navi.model.AMapNaviPath;23 import com.amap.api.navi.view.RouteOverLay;24 import com.oysd.ouyangmap.R;25 import com.oysd.ouyangmap.R.drawable;26 import com.oysd.ouyangmap.R.id;27 import com.oysd.ouyangmap.R.layout;28 import com.oysd.ouyangmap.R.string;29 30 /**31 * 路径规划结果展示界面32 */33 public class NaviRouteActivity extends Activity implements OnClickListener,34 OnMapLoadedListener {35 36 // View37 private Button mStartNaviButton;// 实时导航按钮38 private MapView mMapView;// 地图控件39 private AutoCompleteTextView mThemeText;// 选择导航界面的风格40 private ImageView mThemeImage;// 选择按钮41 private ImageView mRouteBackView;// 返回按钮42 private TextView mRouteDistanceView;// 距离显示控件43 private TextView mRouteTimeView;// 时间显示控件44 private TextView mRouteCostView;// 花费显示控件45 // 地图导航资源46 private AMap mAmap;47 private AMapNavi mAmapNavi;48 private RouteOverLay mRouteOverLay;49 // 主题数组50 private String mTheme[];51 52 private boolean mIsMapLoaded false;53 54 protected void onCreate(Bundle savedInstanceState) {55 super.onCreate(savedInstanceState);56 setContentView(R.layout.activity_route);57 initResources();58 initView(savedInstanceState);59 //MainApplication.getInstance().addActivity(this);60 }61 62 // -----------------------初始化----------------------------------63 64 /**65 * 初始化资源66 */67 private void initResources() {68 Resources res getResources();69 mTheme new String[] { res.getString(R.string.theme_blue),70 res.getString(R.string.theme_pink),71 res.getString(R.string.theme_white) };72 }73 74 /**75 * 初始化控件76 */77 private void initView(Bundle savedInstanceState) {78 mStartNaviButton (Button) findViewById(R.id.routestartnavi);79 80 mRouteBackView (ImageView) findViewById(R.id.route_back_view);81 82 mThemeText (AutoCompleteTextView) findViewById(R.id.navi_theme_text);83 mThemeText.setInputType(InputType.TYPE_NULL);84 ArrayAdapterString themeAdapter new ArrayAdapterString(this,85 R.layout.strategy_inputs, mTheme);86 mThemeText.setAdapter(themeAdapter);87 88 mThemeText.setDropDownBackgroundResource(R.drawable.whitedownborder);89 90 mThemeImage (ImageView) findViewById(R.id.navi_theme_image);91 mRouteDistanceView (TextView) findViewById(R.id.navi_route_distance);92 mRouteTimeView (TextView) findViewById(R.id.navi_route_time);93 mRouteCostView (TextView) findViewById(R.id.navi_route_cost);94 mMapView (MapView) findViewById(R.id.routemap);95 mMapView.onCreate(savedInstanceState);96 mAmap mMapView.getMap();97 mAmap.setOnMapLoadedListener(this);98 mThemeImage.setOnClickListener(this);99 mThemeText.setOnClickListener(this);
100 mStartNaviButton.setOnClickListener(this);
101 mRouteBackView.setOnClickListener(this);
102 mRouteOverLay new RouteOverLay(mAmap, null);
103 }
104
105 /**
106 * 初始化路线描述信息和加载线路
107 */
108 private void initNavi() {
109
110 mAmapNavi AMapNavi.getInstance(this);
111 AMapNaviPath naviPath mAmapNavi.getNaviPath();
112 if (naviPath null) {
113 return;
114 }
115 // 获取路径规划线路显示到地图上
116 mRouteOverLay.setRouteInfo(naviPath);
117 mRouteOverLay.addToMap();
118 if (mIsMapLoaded) {
119 mRouteOverLay.zoomToSpan();
120 }
121
122 double length ((int) (naviPath.getAllLength() / (double) 1000 * 10))
123 / (double) 10;
124 // 不足分钟 按分钟计
125 int time (naviPath.getAllTime() 59) / 60;
126 int cost naviPath.getTollCost();
127 mRouteDistanceView.setText(String.valueOf(length));
128 mRouteTimeView.setText(String.valueOf(time));
129 mRouteCostView.setText(String.valueOf(cost));
130 }
131
132 /**
133 * 获取导航界面主题样式
134 *
135 * param themeColor
136 * return
137 */
138 private int getThemeStyle(String themeColor) {
139 int theme AMapNaviViewOptions.BLUE_COLOR_TOPIC;
140 if (mTheme[0].equals(themeColor)) {
141 theme AMapNaviViewOptions.BLUE_COLOR_TOPIC;
142 } else if (mTheme[1].equals(themeColor)) {
143 theme AMapNaviViewOptions.PINK_COLOR_TOPIC;
144 } else if (mTheme[2].equals(themeColor)) {
145 theme AMapNaviViewOptions.WHITE_COLOR_TOPIC;
146 }
147 return theme;
148 }
149
150 // ------------------------------事件处理-----------------------------
151 Override
152 public void onClick(View v) {
153 switch (v.getId()) {
154 // 实时导航操作
155 case R.id.routestartnavi:
156 Bundle bundle new Bundle();
157 bundle.putInt(theme, getThemeStyle(mThemeText.getText()
158 .toString()));
159 Intent routeIntent new Intent(NaviRouteActivity.this,
160 NaviCustomActivity.class);
161 routeIntent.putExtras(bundle);
162 startActivity(routeIntent);
163 break;
164 // 返回操作
165 case R.id.route_back_view:
166 Intent startIntent new Intent(NaviRouteActivity.this,
167 NaviMapActivity.class);
168 startIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
169 startActivity(startIntent);
170 //MainApplication.getInstance().deleteActivity(this);
171 finish();
172 break;
173 // 主题选择
174 case R.id.navi_theme_image:
175 case R.id.navi_theme_text:
176 mThemeText.showDropDown();
177 break;
178 }
179
180 }
181
182 /**
183 *
184 * 返回键监听
185 * */
186 Override
187 public boolean onKeyDown(int keyCode, KeyEvent event) {
188
189 if (keyCode KeyEvent.KEYCODE_BACK) {
190 Intent intent new Intent(NaviRouteActivity.this,
191 NaviMapActivity.class);
192 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
193 startActivity(intent);
194 //MainApplication.getInstance().deleteActivity(this);
195 finish();
196
197 }
198 return super.onKeyDown(keyCode, event);
199 }
200
201 // ------------------------------生命周期必须重写方法---------------------------
202 Override
203 protected void onSaveInstanceState(Bundle outState) {
204 super.onSaveInstanceState(outState);
205 mMapView.onSaveInstanceState(outState);
206 }
207
208 Override
209 public void onResume() {
210 super.onResume();
211 mMapView.onResume();
212 initNavi();
213 }
214
215 Override
216 public void onPause() {
217 super.onPause();
218 mMapView.onPause();
219 }
220
221 Override
222 public void onDestroy() {
223 super.onDestroy();
224 mMapView.onDestroy();
225 }
226
227 Override
228 public void onMapLoaded() {
229 mIsMapLoaded true;
230 if (mRouteOverLay ! null) {
231 mRouteOverLay.zoomToSpan();
232
233 }
234 }
235
236 } View Code 当用户点击模拟导航 或者 这路径规划界面点击实时导航的时候界面跳转到NaviCustomActivity,以下是其布局文件 1 ?xml version1.0 encodingutf-8?2 LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android3 android:idid/map_container4 android:layout_widthmatch_parent5 android:layout_heightmatch_parent6 android:orientationvertical 7 com.amap.api.navi.AMapNaviView8 android:idid/customnavimap9 android:layout_widthmatch_parent
10 android:layout_heightmatch_parent
11 /
12
13 /LinearLayout View Code 然后是其实现代码 1 package com.oysd.activity;2 3 import android.app.Activity;4 import android.content.Intent;5 import android.os.Bundle;6 import android.view.KeyEvent;7 8 import com.amap.api.navi.AMapNavi;9 import com.amap.api.navi.AMapNaviListener;10 import com.amap.api.navi.AMapNaviView;11 import com.amap.api.navi.AMapNaviViewListener;12 import com.amap.api.navi.AMapNaviViewOptions;13 import com.amap.api.navi.model.AMapNaviInfo;14 import com.amap.api.navi.model.AMapNaviLocation;15 import com.amap.api.navi.model.NaviInfo;16 import com.oysd.Util.TTSController;17 import com.oysd.Util.Utils;18 import com.oysd.ouyangmap.R;19 import com.oysd.ouyangmap.R.id;20 import com.oysd.ouyangmap.R.layout;21 22 /**23 * 实时导航界面24 * 25 */26 public class NaviCustomActivity extends Activity implements27 AMapNaviViewListener {28 29 private AMapNaviView mAmapAMapNaviView;30 // 导航可以设置的参数31 private boolean mDayNightFlag Utils.DAY_MODE;// 默认为白天模式32 private boolean mDeviationFlag Utils.YES_MODE;// 默认进行偏航重算33 private boolean mJamFlag Utils.YES_MODE;// 默认进行拥堵重算34 private boolean mTrafficFlag Utils.OPEN_MODE;// 默认进行交通播报35 private boolean mCameraFlag Utils.OPEN_MODE;// 默认进行摄像头播报36 private boolean mScreenFlag Utils.YES_MODE;// 默认是屏幕常亮37 // 导航界面风格38 private int mThemeStle;39 // 导航监听40 private AMapNaviListener mAmapNaviListener;41 42 public void onCreate(Bundle savedInstanceState) {43 super.onCreate(savedInstanceState);44 setContentView(R.layout.activity_navicustom);45 //语音播报开始46 TTSController.getInstance(this).startSpeaking();47 // 实时导航方式进行导航48 AMapNavi.getInstance(this).startNavi(AMapNavi.GPSNaviMode);49 50 initView(savedInstanceState);51 }52 53 private void initView(Bundle savedInstanceState) {54 mAmapAMapNaviView (AMapNaviView) findViewById(R.id.customnavimap);55 mAmapAMapNaviView.onCreate(savedInstanceState);56 mAmapAMapNaviView.setAMapNaviViewListener(this);57 setAmapNaviViewOptions();58 }59 60 /**61 * 设置导航的参数62 */63 private void setAmapNaviViewOptions() {64 if (mAmapAMapNaviView null) {65 return;66 }67 AMapNaviViewOptions viewOptions new AMapNaviViewOptions();68 viewOptions.setSettingMenuEnabled(true);// 设置导航setting可用69 viewOptions.setNaviNight(mDayNightFlag);// 设置导航是否为黑夜模式70 viewOptions.setReCalculateRouteForYaw(mDeviationFlag);// 设置导偏航是否重算71 viewOptions.setReCalculateRouteForTrafficJam(mJamFlag);// 设置交通拥挤是否重算72 viewOptions.setTrafficInfoUpdateEnabled(mTrafficFlag);// 设置是否更新路况73 viewOptions.setCameraInfoUpdateEnabled(mCameraFlag);// 设置摄像头播报74 viewOptions.setScreenAlwaysBright(mScreenFlag);// 设置屏幕常亮情况75 viewOptions.setNaviViewTopic(mThemeStle);// 设置导航界面主题样式76 77 mAmapAMapNaviView.setViewOptions(viewOptions);78 79 }80 81 private AMapNaviListener getAMapNaviListener() {82 if (mAmapNaviListener null) {83 84 mAmapNaviListener new AMapNaviListener() {85 86 Override87 public void onTrafficStatusUpdate() {88 // TODO Auto-generated method stub89 90 }91 92 Override93 public void onStartNavi(int arg0) {94 // TODO Auto-generated method stub95 96 }97 98 Override99 public void onReCalculateRouteForYaw() {
100 // 可以在频繁重算时进行设置,例如五次之后
101 // i;
102 // if (i 5) {
103 // AMapNaviViewOptions viewOptions new
104 // AMapNaviViewOptions();
105 // viewOptions.setReCalculateRouteForYaw(false);
106 // mAmapAMapNaviView.setViewOptions(viewOptions);
107 // }
108 }
109
110 Override
111 public void onReCalculateRouteForTrafficJam() {
112
113 }
114
115 Override
116 public void onLocationChange(AMapNaviLocation location) {
117
118 }
119
120 Override
121 public void onInitNaviSuccess() {
122 // TODO Auto-generated method stub
123
124 }
125
126 Override
127 public void onInitNaviFailure() {
128 // TODO Auto-generated method stub
129
130 }
131
132 Override
133 public void onGetNavigationText(int arg0, String arg1) {
134 // TODO Auto-generated method stub
135
136 }
137
138 Override
139 public void onEndEmulatorNavi() {
140 // TODO Auto-generated method stub
141
142 }
143
144 Override
145 public void onCalculateRouteSuccess() {
146
147 }
148
149 Override
150 public void onCalculateRouteFailure(int arg0) {
151
152 }
153
154 Override
155 public void onArrivedWayPoint(int arg0) {
156 // TODO Auto-generated method stub
157
158 }
159
160 Override
161 public void onArriveDestination() {
162 // TODO Auto-generated method stub
163
164 }
165
166 Override
167 public void onGpsOpenStatus(boolean arg0) {
168 // TODO Auto-generated method stub
169
170 }
171
172 Override
173 public void onNaviInfoUpdated(AMapNaviInfo arg0) {
174 // TODO Auto-generated method stub
175
176 }
177
178 Override
179 public void onNaviInfoUpdate(NaviInfo arg0) {
180
181 // TODO Auto-generated method stub
182
183 }
184 };
185 }
186 return mAmapNaviListener;
187 }
188
189 // -------处理
190 /**
191 * 导航界面返回按钮监听
192 * */
193 Override
194 public void onNaviCancel() {
195 Intent intent new Intent(NaviCustomActivity.this,
196 FunctionsListActivity.class);
197 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
198 startActivity(intent);
199 finish();
200 }
201
202 /**
203 * 点击设置按钮的事件
204 */
205 Override
206 public void onNaviSetting() {
207 Bundle bundle new Bundle();
208 bundle.putInt(Utils.THEME, mThemeStle);
209 bundle.putBoolean(Utils.DAY_NIGHT_MODE, mDayNightFlag);
210 bundle.putBoolean(Utils.DEVIATION, mDeviationFlag);
211 bundle.putBoolean(Utils.JAM, mJamFlag);
212 bundle.putBoolean(Utils.TRAFFIC, mTrafficFlag);
213 bundle.putBoolean(Utils.CAMERA, mCameraFlag);
214 bundle.putBoolean(Utils.SCREEN, mScreenFlag);
215 Intent intent new Intent(NaviCustomActivity.this,
216 NaviSettingActivity.class);
217 intent.putExtras(bundle);
218 startActivity(intent);
219
220 }
221
222 Override
223 public void onNaviMapMode(int arg0) {
224
225 }
226 Override
227 public void onNaviTurnClick() {
228
229
230 }
231
232 Override
233 public void onNextRoadClick() {
234 // TODO Auto-generated method stub
235
236 }
237
238 Override
239 public void onScanViewButtonClick() {
240 // TODO Auto-generated method stub
241
242 }
243 private void processBundle(Bundle bundle) {
244
245 if (bundle ! null) {
246 mDayNightFlag bundle.getBoolean(Utils.DAY_NIGHT_MODE,
247 mDayNightFlag);
248 mDeviationFlag bundle.getBoolean(Utils.DEVIATION, mDeviationFlag);
249 mJamFlag bundle.getBoolean(Utils.JAM, mJamFlag);
250 mTrafficFlag bundle.getBoolean(Utils.TRAFFIC, mTrafficFlag);
251 mCameraFlag bundle.getBoolean(Utils.CAMERA, mCameraFlag);
252 mScreenFlag bundle.getBoolean(Utils.SCREEN, mScreenFlag);
253 mThemeStle bundle.getInt(Utils.THEME);
254
255 }
256 }
257
258 Override
259 protected void onNewIntent(Intent intent) {
260 // TODO Auto-generated method stub
261 super.onNewIntent(intent);
262 setIntent(intent);
263 }
264
265 Override
266 public boolean onKeyDown(int keyCode, KeyEvent event) {
267
268 if (keyCode KeyEvent.KEYCODE_BACK) {
269 Intent intent new Intent(NaviCustomActivity.this,
270 NaviMapActivity.class);
271 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
272 startActivity(intent);
273 finish();
274 }
275 return super.onKeyDown(keyCode, event);
276 }
277
278 // ------------------------------生命周期方法---------------------------
279 Override
280 protected void onSaveInstanceState(Bundle outState) {
281 super.onSaveInstanceState(outState);
282 mAmapAMapNaviView.onSaveInstanceState(outState);
283 }
284
285 Override
286 public void onResume() {
287 // TODO Auto-generated method stub
288 super.onResume();
289 Bundle bundle getIntent().getExtras();
290 processBundle(bundle);
291 setAmapNaviViewOptions();
292 AMapNavi.getInstance(this).setAMapNaviListener(getAMapNaviListener());
293 mAmapAMapNaviView.onResume();
294
295 }
296
297 Override
298 public void onPause() {
299 mAmapAMapNaviView.onPause();
300 super.onPause();
301 AMapNavi.getInstance(this)
302 .removeAMapNaviListener(getAMapNaviListener());
303
304 }
305
306 Override
307 public void onDestroy() {
308
309 super.onDestroy();
310 mAmapAMapNaviView.onDestroy();
311 //页面结束时停止语音播报
312 TTSController.getInstance(this).stopSpeaking();
313 }
314
315 Override
316 public void onLockMap(boolean arg0) {
317
318 // TODO Auto-generated method stub
319
320 }
321
322
323
324 } View Code 其中包括页面的设置界面NaviSettingActivity的布局文件 1 ?xml version1.0 encodingutf-8?2 LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android3 android:layout_widthmatch_parent4 android:layout_heightmatch_parent5 android:backgroundcolor/grey6 android:orientationvertical 7 8 RelativeLayout9 android:layout_widthmatch_parent10 android:layout_heightwrap_content11 android:layout_marginBottomdimen/setting_margin_bottom 12 13 ImageView14 android:idid/setting_back_image15 android:layout_widthwrap_content16 android:layout_heightwrap_content17 android:srcdrawable/back_top /18 19 TextView20 android:layout_widthwrap_content21 android:layout_heightwrap_content22 android:layout_centerHorizontaltrue23 android:layout_weight124 android:gravitycenter_horizontal25 android:textstring/setting26 android:textColorcolor/black27 android:textSizedimen/titletext_size /28 /RelativeLayout29 30 RelativeLayout31 android:layout_widthmatch_parent32 android:layout_heightwrap_content33 android:layout_marginBottomdimen/setting_margin_bottom34 android:layout_marginLeftdimen/navibar_margin_left35 android:layout_marginRightdimen/navibar_margin_right36 android:layout_marginTopdimen/setting_margin_top37 android:layout_weight138 android:gravitycenter_vertical39 android:backgrounddrawable/whiteborder 40 41 TextView42 android:layout_widthwrap_content43 android:layout_heightwrap_content44 android:layout_marginLeftdimen/margin_left45 android:layout_marginTop10dp46 android:gravitycenter_vertical47 android:textstring/daynightmode48 android:textColorcolor/black49 android:textSizedimen/navisetting_subtext_size /50 51 RadioGroup52 android:idid/day_night_group53 android:layout_widthwrap_content54 android:layout_heightwrap_content55 android:layout_alignParentRighttrue56 android:layout_marginRightdimen/margin_right57 android:orientationhorizontal 58 59 RadioButton60 android:idid/dayratio61 android:layout_widthwrap_content62 android:layout_heightwrap_content63 android:layout_marginRightdimen/margin_right64 android:checkedtrue65 android:textstring/day66 android:textColorcolor/black /67 68 RadioButton69 android:idid/nightradio70 android:layout_widthwrap_content71 android:layout_heightwrap_content72 android:textstring/night73 android:textColorcolor/black /74 /RadioGroup75 /RelativeLayout76 77 RelativeLayout78 android:layout_weight179 android:layout_widthmatch_parent80 android:layout_heightwrap_content81 android:layout_marginBottomdimen/setting_margin_bottom82 android:layout_marginLeftdimen/navibar_margin_left83 android:layout_marginRightdimen/navibar_margin_right84 android:layout_marginTopdimen/setting_margin_top85 android:gravitycenter_vertical86 android:backgrounddrawable/whiteborder 87 88 TextView89 android:layout_widthwrap_content90 android:layout_heightwrap_content91 android:layout_marginLeftdimen/margin_left92 android:layout_marginTop10dp93 android:textstring/deviationrecalculation94 android:textColorcolor/black95 android:textSizedimen/navisetting_subtext_size /96 97 RadioGroup98 android:idid/deviation_group99 android:layout_widthwrap_content
100 android:layout_heightwrap_content
101 android:layout_alignParentRighttrue
102 android:layout_marginRightdimen/margin_right
103 android:orientationhorizontal
104
105 RadioButton
106 android:idid/deviationyesradio
107 android:layout_widthwrap_content
108 android:layout_heightwrap_content
109 android:layout_marginRightdimen/margin_right
110 android:checkedtrue
111 android:textstring/yes
112 android:textColorcolor/black /
113
114 RadioButton
115 android:idid/deviationnoradio
116 android:layout_widthwrap_content
117 android:layout_heightwrap_content
118 android:textstring/no
119 android:textColorcolor/black /
120 /RadioGroup
121 /RelativeLayout
122
123 RelativeLayout
124 android:layout_weight1
125 android:layout_widthmatch_parent
126 android:layout_heightwrap_content
127 android:gravitycenter_vertical
128 android:layout_marginBottomdimen/setting_margin_bottom
129 android:layout_marginLeftdimen/navibar_margin_left
130 android:layout_marginRightdimen/navibar_margin_right
131 android:layout_marginTopdimen/setting_margin_top
132 android:backgrounddrawable/whiteborder
133
134 TextView
135 android:layout_widthwrap_content
136 android:layout_heightwrap_content
137 android:layout_marginLeftdimen/margin_left
138 android:layout_marginTop10dp
139 android:textstring/jamrecalculation
140 android:textColorcolor/black
141 android:textSizedimen/navisetting_subtext_size /
142
143 RadioGroup
144 android:idid/jam_group
145 android:layout_widthwrap_content
146 android:layout_heightwrap_content
147 android:layout_alignParentRighttrue
148 android:layout_marginRightdimen/margin_right
149 android:orientationhorizontal
150
151 RadioButton
152 android:idid/jam_yes_radio
153 android:layout_widthwrap_content
154 android:layout_heightwrap_content
155 android:layout_marginRightdimen/margin_right
156 android:checkedtrue
157 android:textstring/yes
158 android:textColorcolor/black /
159
160 RadioButton
161 android:idid/jam_no_radio
162 android:layout_widthwrap_content
163 android:layout_heightwrap_content
164 android:textstring/no
165 android:textColorcolor/black /
166 /RadioGroup
167 /RelativeLayout
168
169 RelativeLayout
170 android:layout_weight1
171 android:layout_widthmatch_parent
172 android:layout_heightwrap_content
173 android:gravitycenter_vertical
174 android:layout_marginBottomdimen/setting_margin_bottom
175 android:layout_marginLeftdimen/navibar_margin_left
176 android:layout_marginRightdimen/navibar_margin_right
177 android:layout_marginTopdimen/setting_margin_top
178 android:backgrounddrawable/whiteborder
179
180 TextView
181 android:idid/textView2
182 android:layout_widthwrap_content
183 android:layout_heightwrap_content
184 android:layout_marginLeftdimen/margin_left
185 android:layout_marginTop10dp
186 android:textstring/trafficbroadcast
187 android:textColorcolor/black
188 android:textSizedimen/navisetting_subtext_size /
189
190 RadioGroup
191 android:idid/traffic_group
192 android:layout_widthwrap_content
193 android:layout_heightwrap_content
194 android:layout_alignParentRighttrue
195 android:layout_marginRightdimen/margin_right
196 android:orientationhorizontal
197
198 RadioButton
199 android:idid/trafficyesradio
200 android:layout_widthwrap_content
201 android:layout_heightwrap_content
202 android:layout_marginRightdimen/margin_right
203 android:checkedtrue
204 android:textstring/open
205 android:textColorcolor/black /
206
207 RadioButton
208 android:idid/trafficnoradio
209 android:layout_widthwrap_content
210 android:layout_heightwrap_content
211 android:textstring/close
212 android:textColorcolor/black /
213 /RadioGroup
214 /RelativeLayout
215
216 RelativeLayout
217 android:layout_weight1
218 android:layout_widthmatch_parent
219 android:layout_heightwrap_content
220 android:gravitycenter_vertical
221 android:layout_marginBottomdimen/setting_margin_bottom
222 android:layout_marginLeftdimen/navibar_margin_left
223 android:layout_marginRightdimen/navibar_margin_right
224 android:layout_marginTopdimen/setting_margin_top
225 android:backgrounddrawable/whiteborder
226
227 TextView
228 android:layout_widthwrap_content
229 android:layout_heightwrap_content
230 android:layout_marginLeftdimen/margin_left
231 android:layout_marginTop10dp
232 android:textstring/camerabroadcast
233 android:textColorcolor/black
234 android:textSizedimen/navisetting_subtext_size /
235
236 RadioGroup
237 android:idid/camera_group
238 android:layout_widthwrap_content
239 android:layout_heightwrap_content
240 android:layout_alignParentRighttrue
241 android:layout_marginRightdimen/margin_right
242 android:orientationhorizontal
243
244 RadioButton
245 android:idid/camerayesradio
246 android:layout_widthwrap_content
247 android:layout_heightwrap_content
248 android:layout_marginRightdimen/margin_right
249 android:checkedtrue
250 android:textstring/open
251 android:textColorcolor/black /
252
253 RadioButton
254 android:idid/cameranoradio
255 android:layout_widthwrap_content
256 android:layout_heightwrap_content
257 android:textstring/close
258 android:textColorcolor/black /
259 /RadioGroup
260 /RelativeLayout
261
262 RelativeLayout
263 android:layout_weight1
264 android:layout_widthmatch_parent
265 android:layout_heightwrap_content
266 android:gravitycenter_vertical
267 android:layout_marginBottomdimen/setting_margin_bottom
268 android:layout_marginLeftdimen/navibar_margin_left
269 android:layout_marginRightdimen/navibar_margin_right
270 android:layout_marginTopdimen/setting_margin_top
271 android:backgrounddrawable/whiteborder
272
273 TextView
274 android:layout_widthwrap_content
275 android:layout_heightwrap_content
276 android:layout_marginLeftdimen/margin_left
277 android:layout_marginTop10dp
278 android:textstring/screenon
279 android:textColorcolor/black
280 android:textSizedimen/navisetting_subtext_size /
281
282 RadioGroup
283 android:idid/screen_group
284 android:layout_widthwrap_content
285 android:layout_heightwrap_content
286 android:layout_alignParentRighttrue
287 android:layout_marginRightdimen/margin_right
288 android:orientationhorizontal
289
290 RadioButton
291 android:idid/screenonradio
292 android:layout_widthwrap_content
293 android:layout_heightwrap_content
294 android:layout_marginRightdimen/margin_right
295 android:checkedtrue
296 android:textstring/yes
297 android:textColorcolor/black /
298
299 RadioButton
300 android:idid/screenoffradio
301 android:layout_widthwrap_content
302 android:layout_heightwrap_content
303 android:textstring/no
304 android:textColorcolor/black /
305 /RadioGroup
306 /RelativeLayout
307
308 /LinearLayout View Code 实现代码 1 package com.oysd.activity;2 3 import android.app.Activity;4 import android.content.Intent;5 import android.os.Bundle;6 import android.view.KeyEvent;7 import android.view.View;8 import android.view.View.OnClickListener;9 import android.widget.ImageView;10 import android.widget.RadioGroup;11 import android.widget.RadioGroup.OnCheckedChangeListener;12 13 import com.amap.api.navi.AMapNaviViewOptions;14 import com.oysd.Util.Utils;15 import com.oysd.ouyangmap.R;16 import com.oysd.ouyangmap.R.id;17 import com.oysd.ouyangmap.R.layout;18 19 /**20 * 导航设置界面21 *22 */23 public class NaviSettingActivity extends Activity implements OnClickListener,24 OnCheckedChangeListener {25 // ----------------View26 27 private ImageView mBackView;//返回按钮28 private RadioGroup mDayNightGroup;//黑夜模式白天模式29 private RadioGroup mDeviationGroup;//偏航重算30 private RadioGroup mJamGroup;//拥堵重算31 private RadioGroup mTrafficGroup;//交通播报32 private RadioGroup mCameraGroup;//摄像头播报33 private RadioGroup mScreenGroup;//屏幕常亮34 35 private boolean mDayNightFlag Utils.DAY_MODE;36 private boolean mDeviationFlag Utils.YES_MODE;37 private boolean mJamFlag Utils.YES_MODE;38 private boolean mTrafficFlag Utils.OPEN_MODE;39 private boolean mCameraFlag Utils.OPEN_MODE;40 private boolean mScreenFlag Utils.YES_MODE;41 private int mThemeStyle;42 43 protected void onCreate(Bundle savedInstanceState) {44 super.onCreate(savedInstanceState);45 setContentView(R.layout.activity_navisetting);46 Bundle bundlegetIntent().getExtras();47 processBundle(bundle);48 initView();49 initListener();50 }51 52 53 /**54 * 初始化控件55 */56 private void initView() {57 mBackView (ImageView) findViewById(R.id.setting_back_image);58 mDayNightGroup (RadioGroup) findViewById(R.id.day_night_group);59 mDeviationGroup (RadioGroup) findViewById(R.id.deviation_group);60 mJamGroup (RadioGroup) findViewById(R.id.jam_group);61 mTrafficGroup (RadioGroup) findViewById(R.id.traffic_group);62 mCameraGroup (RadioGroup) findViewById(R.id.camera_group);63 mScreenGroup (RadioGroup) findViewById(R.id.screen_group);64 65 }66 67 /**68 * 初始化监听事件69 */70 private void initListener() {71 mBackView.setOnClickListener(this);72 mDayNightGroup.setOnCheckedChangeListener(this);73 mDeviationGroup.setOnCheckedChangeListener(this);74 mJamGroup.setOnCheckedChangeListener(this);75 mTrafficGroup.setOnCheckedChangeListener(this);76 mCameraGroup.setOnCheckedChangeListener(this);77 mScreenGroup.setOnCheckedChangeListener(this);78 79 }80 81 /**82 * 根据导航界面传过来的数据设置当前界面的显示状态83 */84 private void setViewContent() {85 if (mDayNightGroup null) {86 return;87 }88 if (mDayNightFlag) {89 mDayNightGroup.check(R.id.nightradio);90 } else {91 mDayNightGroup.check(R.id.dayratio);92 }93 if (mDeviationFlag) {94 mDeviationGroup.check(R.id.deviationyesradio);95 } else {96 mDeviationGroup.check(R.id.deviationnoradio);97 }98 99 if (mJamFlag) {
100 mJamGroup.check(R.id.jam_yes_radio);
101 } else {
102 mJamGroup.check(R.id.jam_no_radio);
103 }
104
105 if (mTrafficFlag) {
106 mTrafficGroup.check(R.id.trafficyesradio);
107 } else {
108 mTrafficGroup.check(R.id.trafficnoradio);
109 }
110
111 if (mCameraFlag) {
112 mCameraGroup.check(R.id.camerayesradio);
113 } else {
114 mCameraGroup.check(R.id.cameranoradio);
115 }
116
117 if (mScreenFlag) {
118 mScreenGroup.check(R.id.screenonradio);
119 } else {
120 mScreenGroup.check(R.id.screenoffradio);
121 }
122 }
123
124 /**
125 * 处理具体的bundle
126 * param bundle
127 */
128 private void processBundle(Bundle bundle) {
129 if (bundle ! null) {
130 mThemeStyle bundle.getInt(Utils.THEME,
131 AMapNaviViewOptions.DEFAULT_COLOR_TOPIC);
132 mDayNightFlag bundle.getBoolean(Utils.DAY_NIGHT_MODE);
133 mDeviationFlag bundle.getBoolean(Utils.DEVIATION);
134 mJamFlag bundle.getBoolean(Utils.JAM);
135 mTrafficFlag bundle.getBoolean(Utils.TRAFFIC);
136 mCameraFlag bundle.getBoolean(Utils.CAMERA);
137 mScreenFlag bundle.getBoolean(Utils.SCREEN);
138
139 }
140 }
141
142 /**
143 * 根据当前界面的设置设置构建bundle
144 * return
145 */
146 private Bundle getBundle() {
147 Bundle bundle new Bundle();
148 bundle.putBoolean(Utils.DAY_NIGHT_MODE, mDayNightFlag);
149 bundle.putBoolean(Utils.DEVIATION, mDeviationFlag);
150 bundle.putBoolean(Utils.JAM, mJamFlag);
151 bundle.putBoolean(Utils.TRAFFIC, mTrafficFlag);
152 bundle.putBoolean(Utils.CAMERA, mCameraFlag);
153 bundle.putBoolean(Utils.SCREEN, mScreenFlag);
154 bundle.putInt(Utils.THEME, mThemeStyle);
155 return bundle;
156 }
157
158 // 事件处理方法
159 Override
160 public void onClick(View v) {
161 switch (v.getId()) {
162 case R.id.setting_back_image:
163
164 Intent intent new Intent(NaviSettingActivity.this,
165 NaviCustomActivity.class);
166 intent.putExtras(getBundle());
167 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
168 startActivity(intent);
169 finish();
170 break;
171 }
172
173 }
174
175
176 /**
177 * 返回键监听
178 * */
179 Override
180 public boolean onKeyDown(int keyCode, KeyEvent event) {
181
182 if (keyCode KeyEvent.KEYCODE_BACK) {
183 Intent intent new Intent(NaviSettingActivity.this,
184 NaviCustomActivity.class);
185 intent.putExtras(getBundle());
186 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
187 startActivity(intent);
188 finish();
189
190 }
191 return super.onKeyDown(keyCode, event);
192 }
193
194 // ------------------------------生命周期重写方法---------------------------
195
196 Override
197 public void onResume() {
198 // TODO Auto-generated method stub
199 super.onResume();
200 setViewContent();
201 }
202
203 Override
204 public void onCheckedChanged(RadioGroup group, int checkedId) {
205 switch (checkedId) {
206 // 昼夜模式
207 case R.id.dayratio:
208 mDayNightFlag Utils.DAY_MODE;
209 break;
210 case R.id.nightradio:
211 mDayNightFlag Utils.NIGHT_MODE;
212 break;
213 // 偏航重算
214 case R.id.deviationyesradio:
215 mDeviationFlag Utils.YES_MODE;
216 break;
217 case R.id.deviationnoradio:
218 mDeviationFlag Utils.NO_MODE;
219 break;
220 // 拥堵重算
221 case R.id.jam_yes_radio:
222 mJamFlag Utils.YES_MODE;
223 break;
224 case R.id.jam_no_radio:
225 mJamFlag Utils.NO_MODE;
226 break;
227 // 交通播报
228 case R.id.trafficyesradio:
229 mTrafficFlag Utils.OPEN_MODE;
230 break;
231 case R.id.trafficnoradio:
232 mTrafficFlag Utils.CLOSE_MODE;
233 break;
234 // 摄像头播报
235 case R.id.camerayesradio:
236 mCameraFlag Utils.OPEN_MODE;
237 break;
238 case R.id.cameranoradio:
239 mCameraFlag Utils.CLOSE_MODE;
240 break;
241 // 屏幕常亮
242 case R.id.screenonradio:
243 mScreenFlag Utils.YES_MODE;
244 break;
245 case R.id.screenoffradio:
246 mScreenFlag Utils.NO_MODE;
247 break;
248 }
249
250 }
251 } View Code 以上就差不多实现了导航的基本功能后面开始分享地点搜索并且获得搜索点的经纬度 第八步兴趣点搜索地理编码步行规划只是使用简单的兴趣点搜索勿喷另外我这里只是使用了步行导航如果需要驾车导航以及公交导航可以去调用相类似的方法 首先需要在高德API官方网站下载搜索服务的jar包至于在哪里可以自己去查看下载了这么多包了应该知道怎么找了 添加包之后就可以写代码了以下是我的RoutePlanningActivity的布局文件 1 ?xml version1.0 encodingutf-8?2 RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/android3 android:layout_widthmatch_parent4 android:layout_heightmatch_parent 5 6 com.amap.api.maps.MapView7 android:idid/map8 android:layout_widthmatch_parent9 android:layout_heightmatch_parent /
10
11 LinearLayout
12 android:layout_widthmatch_parent
13 android:layout_heightwrap_content
14 android:orientationvertical
15
16 LinearLayout
17 android:layout_widthfill_parent
18 android:layout_heightmatch_parent
19 android:orientationhorizontal
20 AutoCompleteTextView
21 android:idid/startPlace
22 android:layout_widthmatch_parent
23 android:layout_heightwrap_content
24 android:layout_weight2
25 android:hint起点
26 android:text天虹商场 /
27 Button
28 android:idid/addStartPlace
29 android:layout_widthmatch_parent
30 android:layout_heightwrap_content
31 android:layout_weight4
32 android:text添加起点/
33 /LinearLayout
34
35 LinearLayout
36 android:layout_widthfill_parent
37 android:layout_heightmatch_parent
38 android:orientationhorizontal
39 AutoCompleteTextView
40 android:idid/endPlace
41 android:layout_widthmatch_parent
42 android:layout_heightwrap_content
43 android:layout_weight2
44 android:hint终点
45 android:text上沙村 /
46 Button
47 android:idid/addEndPlace
48 android:layout_widthmatch_parent
49 android:layout_heightwrap_content
50 android:layout_weight4
51 android:text添加终点/
52 /LinearLayout
53
54 Button
55 android:idid/searchBtn
56 android:layout_widthmatch_parent
57 android:layout_heightwrap_content
58 android:text搜索/
59
60 /LinearLayout
61
62 /RelativeLayout View Code 然后就是RoutePlanningActivity的实现代码了 1 package com.oysd.activity;2 3 import java.util.ArrayList;4 import java.util.List;5 6 import com.amap.api.maps.AMap;7 import com.amap.api.maps.MapView;8 import com.amap.api.maps.overlay.WalkRouteOverlay;9 import com.amap.api.services.core.AMapException;10 import com.amap.api.services.core.LatLonPoint;11 import com.amap.api.services.geocoder.GeocodeQuery;12 import com.amap.api.services.geocoder.GeocodeResult;13 import com.amap.api.services.geocoder.GeocodeSearch;14 import com.amap.api.services.geocoder.GeocodeSearch.OnGeocodeSearchListener;15 import com.amap.api.services.geocoder.RegeocodeResult;16 import com.amap.api.services.help.Inputtips;17 import com.amap.api.services.help.Tip;18 import com.amap.api.services.poisearch.PoiSearch;19 import com.amap.api.services.route.BusRouteResult;20 import com.amap.api.services.route.DriveRouteResult;21 import com.amap.api.services.route.RouteSearch;22 import com.amap.api.services.route.RouteSearch.OnRouteSearchListener;23 import com.amap.api.services.route.WalkPath;24 import com.amap.api.services.route.WalkRouteResult;25 import com.oysd.ouyangmap.R;26 27 import android.app.Activity;28 import android.app.ProgressDialog;29 import android.os.Bundle;30 import android.text.Editable;31 import android.text.TextWatcher;32 import android.view.View;33 import android.view.View.OnClickListener;34 import android.widget.ArrayAdapter;35 import android.widget.AutoCompleteTextView;36 import android.widget.Button;37 import android.widget.EditText;38 import android.widget.Toast;39 40 public class RoutePlanningActivity extends Activity implements41 OnRouteSearchListener, OnGeocodeSearchListener, OnClickListener{42 43 private MapView mMapView;44 private AMap mAMap;45 46 private AutoCompleteTextView startPlace;// 起点47 private AutoCompleteTextView endPlace;// 终点48 private Button searchBtn;// 搜索按钮49 50 private Button addStartPlaceBtn;51 private Button addEndPlaceBtn;52 private boolean isStart;53 private boolean isEnd;54 private GeocodeSearch mGeocodeSearch;55 // 搜索时进度条56 private ProgressDialog progDialog null;57 private String strStart;58 private String strEnd;59 private LatLonPoint startPoint null;60 private LatLonPoint endPoint null;61 private PoiSearch.Query startSearchQuery;62 private PoiSearch.Query endSearchQuery;63 64 private int walkMode RouteSearch.WalkDefault;// 步行默认模式65 private RouteSearch routeSearch;66 67 Override68 protected void onCreate(Bundle savedInstanceState) {69 // TODO Auto-generated method stub70 super.onCreate(savedInstanceState);71 setContentView(R.layout.activity_routeplanning);72 mMapView (MapView) findViewById(R.id.map);73 mMapView.onCreate(savedInstanceState);74 initAMap();75 findViewById();76 }77 78 /**79 * 初始化AMap对象80 */81 private void initAMap() {82 if (mAMap null) {83 mAMap mMapView.getMap();84 }85 mGeocodeSearch new GeocodeSearch(this);86 mGeocodeSearch.setOnGeocodeSearchListener(this);87 88 }89 90 /**91 * 获取控件92 */93 private void findViewById() {94 startPlace (AutoCompleteTextView) findViewById(R.id.startPlace);95 endPlace (AutoCompleteTextView) findViewById(R.id.endPlace);96 searchBtn (Button) findViewById(R.id.searchBtn);97 addEndPlaceBtn (Button) findViewById(R.id.addEndPlace);98 addStartPlaceBtn (Button) findViewById(R.id.addStartPlace);99
100 setListener();
101 }
102
103 /**
104 * 设置监听
105 */
106 private void setListener() {
107
108 searchBtn.setOnClickListener(this);
109 addStartPlaceBtn.setOnClickListener(this);
110 addEndPlaceBtn.setOnClickListener(this);
111 startPlace.addTextChangedListener(this.startPlaceWatch);
112 endPlace.addTextChangedListener(this.endPlaceWatch);
113 }
114
115 TextWatcher startPlaceWatch new TextWatcher() {
116
117 Override
118 public void onTextChanged(CharSequence s, int start, int before, int count) {
119 // TODO Auto-generated method stub
120 String newText s.toString().trim();
121 Inputtips inputTips new Inputtips(RoutePlanningActivity.this,
122 new Inputtips.InputtipsListener() {
123 Override
124 public void onGetInputtips(ListTip tipList, int rCode) {
125 if (rCode 0) {// 正确返回
126 ListString listString new ArrayListString();
127 for (int i 0; i tipList.size(); i) {
128 listString.add(tipList.get(i).getName());
129 }
130 ArrayAdapterString aAdapter new ArrayAdapterString(RoutePlanningActivity.this,android.R.layout.simple_list_item_1, listString);
131 startPlace.setAdapter(aAdapter);
132 aAdapter.notifyDataSetChanged();
133 }
134 }
135 });
136 try {
137 // 第一个参数表示提示关键字第二个参数默认代表全国也可以为城市区号
138 inputTips.requestInputtips(newText,null);
139 } catch (AMapException e) {
140 e.printStackTrace();
141 }
142 }
143
144 Override
145 public void beforeTextChanged(CharSequence s, int start, int count,
146 int after) {
147 // TODO Auto-generated method stub
148
149 }
150
151 Override
152 public void afterTextChanged(Editable s) {
153 // TODO Auto-generated method stub
154
155 }
156 };
157
158 TextWatcher endPlaceWatch new TextWatcher() {
159
160 Override
161 public void onTextChanged(CharSequence s, int start, int before, int count) {
162 // TODO Auto-generated method stub
163 String newText s.toString().trim();
164 Inputtips inputTips new Inputtips(RoutePlanningActivity.this,
165 new Inputtips.InputtipsListener() {
166 Override
167 public void onGetInputtips(ListTip tipList, int rCode) {
168 if (rCode 0) {// 正确返回
169 ListString listString new ArrayListString();
170 for (int i 0; i tipList.size(); i) {
171 listString.add(tipList.get(i).getName());
172 }
173 ArrayAdapterString aAdapter new ArrayAdapterString(RoutePlanningActivity.this,android.R.layout.simple_list_item_2, listString);
174 startPlace.setAdapter(aAdapter);
175 aAdapter.notifyDataSetChanged();
176 }
177 }
178 });
179 try {
180 // 第一个参数表示提示关键字第二个参数默认代表全国也可以为城市区号
181 inputTips.requestInputtips(newText,null);
182 } catch (AMapException e) {
183 e.printStackTrace();
184 }
185 }
186
187 Override
188 public void beforeTextChanged(CharSequence s, int start, int count,
189 int after) {
190 // TODO Auto-generated method stub
191
192 }
193
194 Override
195 public void afterTextChanged(Editable s) {
196 // TODO Auto-generated method stub
197
198 }
199 };
200
201 /**
202 * 显示进度框
203 */
204 private void showProgressDialog() {
205 if (progDialog null)
206 progDialog new ProgressDialog(this);
207 progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
208 progDialog.setIndeterminate(false);
209 progDialog.setCancelable(false);
210 progDialog.setMessage(正在规划:\n);
211 progDialog.show();
212 }
213
214 /**
215 * 隐藏进度框
216 */
217 private void dissmissProgressDialog() {
218 if (progDialog ! null) {
219 progDialog.dismiss();
220 }
221 }
222
223 Override
224 public void onBusRouteSearched(BusRouteResult arg0, int arg1) {
225 // TODO Auto-generated method stub
226
227 }
228
229 Override
230 public void onDriveRouteSearched(DriveRouteResult arg0, int arg1) {
231 // TODO Auto-generated method stub
232
233 }
234
235 Override
236 public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int rCode) {
237 // TODO Auto-generated method stub
238 dissmissProgressDialog();
239 if (rCode 0) {
240 if (walkRouteResult ! null walkRouteResult.getPaths() ! null
241 walkRouteResult.getPaths().size() 0) {
242 WalkPath walkPath walkRouteResult.getPaths().get(0);
243
244 mAMap.clear();// 清理之前的图标
245 WalkRouteOverlay walkRouteOverlay new WalkRouteOverlay(this,
246 mAMap, walkPath, walkRouteResult.getStartPos(),
247 walkRouteResult.getTargetPos());
248 walkRouteOverlay.removeFromMap();
249 walkRouteOverlay.addToMap();
250 walkRouteOverlay.zoomToSpan();
251 } else {
252 dissmissProgressDialog();// 隐藏对话框
253 Toast.makeText(RoutePlanningActivity.this, 没有搜索到结果,
254 Toast.LENGTH_SHORT).show();
255 }
256 } else {
257 dissmissProgressDialog();// 隐藏对话框
258 Toast.makeText(RoutePlanningActivity.this, 网络错误,
259 Toast.LENGTH_SHORT).show();
260 }
261 }
262
263 Override
264 public void onGeocodeSearched(GeocodeResult geocodeResult, int rCode) {
265 // TODO Auto-generated method stub
266 if (rCode 0) {
267 if (geocodeResult ! null
268 geocodeResult.getGeocodeAddressList() ! null
269 geocodeResult.getGeocodeAddressList().size() 0) {
270 LatLonPoint latLonPoint geocodeResult.getGeocodeAddressList()
271 .get(0).getLatLonPoint();
272 if (isStart) {
273 startPoint new LatLonPoint(latLonPoint.getLatitude(),
274 latLonPoint.getLongitude());
275 Toast.makeText(RoutePlanningActivity.this, 加入起点成功,
276 Toast.LENGTH_SHORT).show();
277 } else if (isEnd) {
278 endPoint new LatLonPoint(latLonPoint.getLatitude(),
279 latLonPoint.getLongitude());
280 Toast.makeText(RoutePlanningActivity.this, 加入终点成功,
281 Toast.LENGTH_SHORT).show();
282 }
283 } else {
284 Toast.makeText(RoutePlanningActivity.this, 没有结果,
285 Toast.LENGTH_SHORT).show();
286 }
287
288 } else {
289 Toast.makeText(RoutePlanningActivity.this, 网络连接失败,
290 Toast.LENGTH_SHORT).show();
291 }
292 }
293
294 Override
295 public void onRegeocodeSearched(RegeocodeResult arg0, int arg1) {
296 // TODO Auto-generated method stub
297
298 }
299
300 Override
301 public void onClick(View v) {
302 // TODO Auto-generated method stub
303 switch(v.getId()){
304 case R.id.searchBtn:
305 doSearch();
306 break;
307 case R.id.addStartPlace:
308 addStartPlace();
309 break;
310 case R.id.addEndPlace:
311 addEndPlace();
312 break;
313 }
314 }
315
316 /**
317 * 执行搜索功能
318 */
319 private void doSearch(){
320 showProgressDialog();// 显示进度框
321 RouteSearch.FromAndTo fromAndto new RouteSearch.FromAndTo(
322 startPoint, endPoint);
323 routeSearch new RouteSearch(RoutePlanningActivity.this);
324 routeSearch.setRouteSearchListener(RoutePlanningActivity.this);
325 RouteSearch.WalkRouteQuery query new RouteSearch.WalkRouteQuery(
326 fromAndto, walkMode);
327 routeSearch.calculateWalkRouteAsyn(query);
328 }
329
330 /**
331 * 执行添加起点操作功能
332 */
333 private void addStartPlace(){
334
335 isStart true;
336 isEnd false;
337 addPoint(startPlace.getText().toString().trim());
338 }
339
340
341 /**
342 * 执行添加终点操作功能
343 */
344 private void addEndPlace(){
345 isStart false;
346 isEnd true;
347 addPoint(endPlace.getText().toString().trim());
348 }
349
350 private void addPoint(String address){
351
352 // 第一个参数表示地址第二个参数表示查询城市中文或者中文全拼citycode、adcode
353 GeocodeQuery query new GeocodeQuery(address, 深圳);
354 mGeocodeSearch.getFromLocationNameAsyn(query);
355 }
356
357 } View Code 不过这里面使用了AutoCompleteTextView 来实现输入提示里面有一点点的问题我这里有输入起点与终点 输入起点的时候会有输入提示但是输入终点就没有任何提示自己也是不知道问题出在哪里若有大神飘过还请帮我解惑 到这里 这个高德地图的简单功能开发算是分享得差不多了。 其实高德地图、百度地图、谷歌地图这些的开发都大同小异还是需要认真查看API文档 如果可能的话完全可以在自己的手机上安装一个属于自己的私人地图想要什么功能自己往里面添加自己怎么用的方便怎么用。。。。转载于:https://www.cnblogs.com/ouyangduoduo/p/4623680.html