Android 百度地图之全局搜索周边搜索全国搜索城市路线规划(升级版附源码)

这个是今年3月份做的,拿出来分享哈,之前的一篇结构单一,现在这个新增路线规划:

路线1:无地铁

路线2:时间快

路线3:少换乘

路线4:少步行

如下图:

2.地点搜索(局部搜索)如下图:

3 定位功能打开app即可定位如上图

4 附近查找(还不完善)

5.搜索分页功能

当搜索的结果大于10条会自动显示上一页,下一页按钮,如下图:

基本功能介绍完毕,直接上代码

mainactivity源码:

 

package cn.yhsh.maptest;

import java.util.ArrayList;
import java.util.List;

import utils.DrivingRouteOverlay;
import utils.PoiOverlay;
import utils.TransitRouteOverlay;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Display;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MapViewLayoutParams;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.TextOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.model.LatLngBounds;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiBoundSearchOption;
import com.baidu.mapapi.search.poi.PoiCitySearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiNearbySearchOption;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;
import com.baidu.mapapi.search.route.BikingRouteResult;
import com.baidu.mapapi.search.route.DrivingRoutePlanOption;
import com.baidu.mapapi.search.route.DrivingRoutePlanOption.DrivingPolicy;
import com.baidu.mapapi.search.route.DrivingRouteResult;
import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener;
import com.baidu.mapapi.search.route.PlanNode;
import com.baidu.mapapi.search.route.RoutePlanSearch;
import com.baidu.mapapi.search.route.TransitRoutePlanOption;
import com.baidu.mapapi.search.route.TransitRoutePlanOption.TransitPolicy;
import com.baidu.mapapi.search.route.TransitRouteResult;
import com.baidu.mapapi.search.route.WalkingRouteResult;

public class MainActivity extends FragmentActivity implements
		OnMarkerClickListener, OnClickListener, OnLongClickListener {

	double weidu = 39.9184470000;
	double jindu = 116.3252280000;// 这个是百度地图公司的经纬度坐标点
	LatLng point = new LatLng(weidu, jindu);
	private IntentFilter filter;
	private MapView mv_maptest;
	public BaiduMap map;
	private View dialog_tv;
	private TextView tv_dialog;
	private EditText et_serach;
	private Button bt_search;
	private String et_result;
	private PoiInfo poiInfo;
	private LinearLayout ll_suofang;
	private LinearLayout llweixing;
	private LinearLayout ll_search;
	private EditText et_nearsearch;
	private String near_result;
	private AlertDialog alertDialog;
	private double latitude_result;
	private double longitude_result;
	private Builder dialog;
	private String str_city;
	private String str_search;
	private Button bt_xiayiye;
	private int index = 0;
	private Button bt_shangyiye;
	private boolean isShow = false;// 默认对话框关闭
	private EditText et_search_start;
	private EditText et_search_end;
	private String trim_start;
	private String trim_end;
	EditText et_search_middle;
	private String trim_middle;
	private AlertDialog create_road;
	private TransitPolicy ebusTimeFirst;
	private RadioGroup rg_group;
	private RadioGroup rg_jiache_huancheng;
	private RadioButton rb_transtrate_road1;
	private RadioButton rb_transtrate_road2;
	// 设置驾车路线换乘标示
	private int jiache = 11;
	private int huancheng = 12;
	private int jiache_huancheng = jiache;
	private RadioButton rb_nosubway;
	private RadioButton rb_time_first;
	private RadioButton rb_little_transtrate;
	private RadioButton rb_little_walking;
	int transfer_mode = 0;// 换乘方式自定义标示
	private String split_city = "北京";// 途中必须经过城市默认北京;// 切割后必须的城市出发目的地
	private String split_splans;// 切割后必须经过的地方
	public LocationClient mLocationClient = null;
	public BDLocationListener myListener = null;// 定位方法
	private ImageButton ib_location;
	private boolean open = false;//默认false去掉标尺
	//开启定位后拿到的经纬度
	private double location_latitude;
	private double location_longitude;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// requestWindowFeature(Window.FEATURE_NO_TITLE);//去除标题栏
		initsdk();
		setContentView(R.layout.activity_main);
		// 拿到mapview控件设置默认缩放比例
		mv_maptest = (MapView) findViewById(R.id.mv_maptest);
		et_serach = (EditText) findViewById(R.id.et_serach);
		bt_search = (Button) findViewById(R.id.bt_search);
		Button bt_putong = (Button) findViewById(R.id.bt_putong);
		Button bt_weixing = (Button) findViewById(R.id.bt_weixing);
		Button bt_jiaotong = (Button) findViewById(R.id.bt_jiaotong);
		ImageButton ib_da = (ImageButton) findViewById(R.id.ib_da);
		ImageButton ib_xiao = (ImageButton) findViewById(R.id.ib_xiao);
		ll_suofang = (LinearLayout) findViewById(R.id.ll_suofang);
		llweixing = (LinearLayout) findViewById(R.id.llweixing);
		bt_xiayiye = (Button) findViewById(R.id.bt_xiayiye);
		bt_shangyiye = (Button) findViewById(R.id.bt_shangyiye);
		//初始化定位按钮
		ib_location = (ImageButton)findViewById(R.id.ib_location);
		// 首先隐藏下一页按钮
		bt_xiayiye.setVisibility(View.GONE);
		bt_shangyiye.setVisibility(View.GONE);
		ll_search = (LinearLayout) findViewById(R.id.ll_serach);
		map = mv_maptest.getMap();
		MapStatusUpdate zoom = MapStatusUpdateFactory.zoomTo(14);// 设置地图默认缩放比例为10(默认为12)
		map.setMapStatus(zoom);
		MapStatusUpdate center = MapStatusUpdateFactory.newLatLng(point);
		// 设置默认中心店
		map.setMapStatus(center);
		// 去掉缩放按钮
		mv_maptest.showZoomControls(false);
		// 去掉标尺
		mv_maptest.showScaleControl(false);
		boolean menu = mv_maptest.showContextMenu();
		Log.e("测试", menu + "");

		// 写文字
		drawtext();
		// 画对话框在地图上面通过点击图片后
		dialogpic();
		// ❀图片画地图上面
		drawpictuer();

		bt_search.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				index = 0;
				// 拿到输入框的内容
				et_result = et_serach.getText().toString().trim();
				if (!et_result.equals("") && !et_result.equals(null)) {
					if (et_result.contains("_")) {
						// 如果是城市搜索格式。走城市搜索方法
						// 切割数据
						String[] split = et_result.split("_");
						str_city = split[0];
						str_search = split[1];
						citySearch();
					} else {
						// 不是城市搜索格式,走范围内搜索方法
						// 搜索资源
						serachrescours();
					}
					Toast.makeText(MainActivity.this, et_result,
							Toast.LENGTH_LONG).show();
				} else {
					Toast.makeText(MainActivity.this, "请输入数据再点击查询按钮",
							Toast.LENGTH_LONG).show();
				}
			}
		});
		// 设置三个按钮点击事件
		tv_dialog.setOnClickListener(this);
		bt_putong.setOnClickListener(this);
		bt_weixing.setOnClickListener(this);
		bt_jiaotong.setOnClickListener(this);
		ib_da.setOnClickListener(this);
		ib_xiao.setOnClickListener(this);
		bt_xiayiye.setOnClickListener(this);
		bt_shangyiye.setOnClickListener(this);
		//设置定位图标的点击事件
		ib_location.setOnClickListener(this);
		/**
		 * 长按放大按钮隐藏缩放按钮
		 */
		ib_da.setOnLongClickListener(this);
		bt_putong.setOnLongClickListener(this);
		tv_dialog.setOnLongClickListener(this);
		bt_search.setOnLongClickListener(this);
		bt_xiayiye.setOnLongClickListener(this);
		// 跳转到路线查询页面
		// ib_xiao.setOnLongClickListener(this);
		mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类
		myListener = new MyLocationListeners();
		mLocationClient.registerLocationListener(myListener); // 注册监听函数
		initLocation();// 定位的方法
	}

	/**
	 * 换乘路线
	 */
	private void translateroad(String city, String plans_from, String plans_to,
			int select_int) {
		RoutePlanSearch rps = RoutePlanSearch.newInstance();
		rps.setOnGetRoutePlanResultListener(new MyOnGetRoutePlanResultListener());
		TransitRoutePlanOption transit_option = new TransitRoutePlanOption();
		transit_option
				.from(PlanNode.withCityNameAndPlaceName(city, plans_from));
		transit_option.to(PlanNode.withCityNameAndPlaceName(city, plans_to));// 史各庄经纬度
		// 设置所在城市
		transit_option.city(city);
		// 设置优选条件
		switch (select_int) {
		case 0:
			ebusTimeFirst = TransitPolicy.EBUS_NO_SUBWAY;// 少地铁
			break;
		case 1:
			ebusTimeFirst = TransitPolicy.EBUS_TIME_FIRST;// 少耗时
			break;
		case 2:
			ebusTimeFirst = TransitPolicy.EBUS_TRANSFER_FIRST;// 少换乘
			break;
		case 3:
			ebusTimeFirst = TransitPolicy.EBUS_WALK_FIRST;// 少步行
			break;
		}
		transit_option.policy(ebusTimeFirst);
		rps.transitSearch(transit_option);// 发起换乘搜索
	}

	/**
	 * 驾车路线初始化
	 */
	private void driverPlan(String city, String plans, String plans_from,
			String plans_to) {
		RoutePlanSearch rps = RoutePlanSearch.newInstance();
		rps.setOnGetRoutePlanResultListener(new MyOnGetRoutePlanResultListener());
		DrivingRoutePlanOption driver_option = new DrivingRoutePlanOption();
		// driver_option.from(PlanNode.withLocation(point_from));
		// driver_option.to(PlanNode.withLocation(point_to));//史各庄经纬度
		driver_option.from(PlanNode.withCityNameAndPlaceName(city, plans_from));
		driver_option.to(PlanNode.withCityNameAndPlaceName(city, plans_to));// 史各庄经纬度
		// 设置优选条件
		driver_option.policy(DrivingPolicy.ECAR_TIME_FIRST);// 时间优先
		if (plans != "" && plans != null) {
			List<PlanNode> roate_plans = new ArrayList<PlanNode>();
			roate_plans.add(PlanNode.withCityNameAndPlaceName(city, plans));
			// roate_plans.add(PlanNode.withCityNameAndPlaceName("北京", "西直门"));
			// 设置途经点
			driver_option.passBy(roate_plans);
		}
		rps.drivingSearch(driver_option);// 发起搜索
	}

	public class MyOnGetRoutePlanResultListener implements
			OnGetRoutePlanResultListener {

		@Override
		public void onGetBikingRouteResult(BikingRouteResult arg0) {
			// 获取所有骑行规划路线
		}

		@Override
		public void onGetDrivingRouteResult(DrivingRouteResult result) {
			if (result == null
					|| result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
				Toast.makeText(MainActivity.this, "未找到结果", Toast.LENGTH_LONG)
						.show();
				return;
			}
//			Log.e("空指针",result.toString());
			// 开车路线
			DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
					map);
			// 设置覆盖物的点击事件
			map.setOnMarkerClickListener(drivingRouteOverlay);
			drivingRouteOverlay.setData(result.getRouteLines().get(0));// 获取开车路线后设置在地图上显示
			drivingRouteOverlay.addToMap();// 开车路线添加到地图上
			drivingRouteOverlay.zoomToSpan();// 使搜索的结果在可视范围内
		}

		@Override
		public void onGetTransitRouteResult(TransitRouteResult result) {
			// 换乘路线结果
			if (result == null
					|| result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
				Toast.makeText(MainActivity.this, "未找到结果", Toast.LENGTH_LONG)
						.show();
				return;
			}
			TransitRouteOverlay tro = new TransitRouteOverlay(map);
			// List<TransitRouteLine> routeLines = arg0.getRouteLines();
			// for (int i = 0; i < routeLines.size(); i++) {
			// tro.setData(routeLines.get(i));
			// }
			// 设置数据
			tro.setData(result.getRouteLines().get(0));
//			Log.e("空指针",result.getRouteLines().toString());
			tro.addToMap();// 开车路线添加到地图上
			tro.zoomToSpan();// 使搜索的结果在可视范围内
		}

		@Override
		public void onGetWalkingRouteResult(WalkingRouteResult arg0) {
			// 步行
		}

	}

	/**
	 * 在范围内搜索的方法
	 */
	private void serachrescours() {
		PoiSearch poiS = PoiSearch.newInstance();// 创建对象
		poiS.setOnGetPoiSearchResultListener(new Mypoisearch());
		PoiBoundSearchOption fanwei = new PoiBoundSearchOption();
		LatLngBounds llbs = new LatLngBounds.Builder()
				.include(new LatLng(40.7460400000, 114.9219870000))
				.include(new LatLng(38.9954100000, 117.7206750000)).build();
		fanwei.bound(llbs).keyword(et_result);// 搜索的内容
		// 设置下一页数据
		fanwei.pageNum(index);
		// 发起范围内搜索
		poiS.searchInBound(fanwei);
	}

	class Mypoisearch implements OnGetPoiSearchResultListener {

		@Override
		public void onGetPoiDetailResult(PoiDetailResult arg0) {

		}

		@Override
		public void onGetPoiResult(PoiResult result) {
			if (result == null
					|| result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
				Toast.makeText(MainActivity.this, "未找到结果", Toast.LENGTH_LONG)
						.show();
				return;
			}
			// 返回全城查找结果
			int currentPageNum = result.getCurrentPageNum() + 1;// 获取当前页数
			int totalPageNum = result.getTotalPageNum();// 获取总共页数
			int currentPageCapacity = result.getCurrentPageCapacity();// 获取当前页显示个数
			int totalPoiNum = result.getTotalPoiNum();// 获取总条数
			if (totalPoiNum > 10) {
				bt_xiayiye.setVisibility(View.VISIBLE);
				bt_shangyiye.setVisibility(View.VISIBLE);
				llweixing.setVisibility(View.GONE);// 隐藏卫星地图
			} else {
				bt_xiayiye.setVisibility(View.GONE);
				bt_shangyiye.setVisibility(View.GONE);
				llweixing.setVisibility(View.VISIBLE);// 显示卫星地图
			}
			// 返回搜索结果
			if (index + 1 >= totalPageNum && totalPageNum != 1) {
				index = totalPageNum;
				Toast.makeText(getApplicationContext(), "已经到最后一页了。",
						Toast.LENGTH_SHORT).show();
			} else if (index != 0 && index != totalPageNum) {
				Toast.makeText(
						getApplicationContext(),
						"当前为第" + currentPageNum + "页:总页数为" + totalPageNum
								+ ":当前页显示个数为" + currentPageCapacity
								+ "个:总结果条数为" + totalPoiNum + "条",
						Toast.LENGTH_SHORT).show();
			}
			// 在创建覆盖物之前清除上一页的覆盖物
			map.clear();// 清除覆物
			PoiOverlay pioo = new MyPoiOverlay(map);
			// 设置覆盖物marker点击事件
			map.setOnMarkerClickListener(pioo);
			// 设置数据
			pioo.setData(result);
			// 添加地图
			pioo.addToMap();
			// 缩小到搜索到的位置
			pioo.zoomToSpan();
		}

		// 写一类继承PoiOverlay
		class MyPoiOverlay extends PoiOverlay {

			public MyPoiOverlay(BaiduMap baiduMap) {
				super(baiduMap);
			}

			/*
			 * 重写onPoiClick点击事件方法
			 */
			@Override
			public boolean onPoiClick(int i) {
				// 拿到结果
				PoiResult poiResult = getPoiResult();
				poiInfo = poiResult.getAllPoi().get(i);
				// 拿到搜索结果的经纬度
				latitude_result = poiInfo.location.latitude;
				longitude_result = poiInfo.location.longitude;
				// 弹出吐司显示点中的点击事件
				Toast.makeText(
						getApplicationContext(),
						poiInfo.city + " " + poiInfo.name + " "
								+ poiInfo.address, Toast.LENGTH_LONG).show();
				// 弹出populowindow
				showPopupWindow(getCurrentFocus());
				// showPopupWindow(mv_maptest);

				// 弹出附近搜索对话框
				showDialog_NearSearch();
				return super.onPoiClick(i);
			}
		}

	}

	/**
	 * 显示popupwindow的方法
	 */

	private void showPopupWindow(View view) {

		// 一个自定义的布局,作为显示的内容
		View contentView = View.inflate(getApplicationContext(),
				R.layout.activity_popupwindow, null);
		// 设置按钮的点击事件
		TextView button_popuowindow = (TextView) contentView
				.findViewById(R.id.tv_popuowindow);
		button_popuowindow.setText(poiInfo.city + " " + poiInfo.name + " "
				+ poiInfo.address);
		button_popuowindow.setTextColor(Color.BLUE);
		button_popuowindow.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Toast.makeText(
						getApplicationContext(),
						"欢迎使用扬宏豕慧官网修改版本地图,更多请访问扬宏豕慧官方网站http://www.iyhsh.faisco.cn",
						Toast.LENGTH_SHORT).show();
			}
		});

		final PopupWindow popupWindow = new PopupWindow(contentView,
				LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true);

		popupWindow.setTouchable(true);

		popupWindow.setTouchInterceptor(new OnTouchListener() {

			@Override
			public boolean onTouch(View v, MotionEvent event) {

				return false;
				// 这里如果返回true的话,touch事件将被拦截
				// 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss
			}
		});

		// 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框
		// 我觉得这里是API的一个bug
		// popupWindow.setBackgroundDrawable(getResources().getDrawable(
		// R.drawable.toum));
		popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// 设置背景颜色为透明色
		// getResources().getDrawable(R.drawable.toum).setAlpha(0);// 设置图片透明度为0
		// 设置好参数之后再show
		// int[] location = new int [2];
		// view.getLocationInWindow(location);
		// int x = location[0];
		// int y = location[1];
		// popupWindow.showAtLocation(view, Gravity.CENTER_HORIZONTAL, x, y);
		popupWindow.showAsDropDown(view);// 此方法也可以
		// 缩放动画
		ScaleAnimation scanim = new ScaleAnimation(0, 1, 0, 1,
				Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1.0f);
		scanim.setDuration(4000);// 四秒钟

		// 渐变动画
		AlphaAnimation apap = new AlphaAnimation(0.1f, 1.0f);
		apap.setDuration(4000);

		// 旋转动画
		RotateAnimation ra = new RotateAnimation(0, 360,
				Animation.RELATIVE_TO_SELF, 0.1f, Animation.RELATIVE_TO_SELF,
				0.1f);
		ra.setDuration(4000);
		ra.setFillAfter(true);// 动画执行完后是否停留在执行完的状态
		// 组合动画
		AnimationSet ams = new AnimationSet(true);// 共享动画插入器
		// 添加组合动画
		ams.addAnimation(ra);
		ams.addAnimation(scanim);
		ams.addAnimation(apap);
		// 开启动画效果
		contentView.startAnimation(ams);
	}

	private void dialogpic() {
		dialog_tv = View.inflate(getApplicationContext(),
				R.layout.activity_dialogpic, null);
		MapViewLayoutParams params = new MapViewLayoutParams.Builder()
				.layoutMode(MapViewLayoutParams.ELayoutMode.mapMode)
				.position(point).width(MapViewLayoutParams.WRAP_CONTENT)
				.height(MapViewLayoutParams.WRAP_CONTENT).build();
		mv_maptest.addView(dialog_tv, params);
		dialog_tv.setVisibility(View.INVISIBLE);// 首先隐藏
		tv_dialog = (TextView) dialog_tv.findViewById(R.id.tv_dialog);
		map.setOnMarkerClickListener(this);// 设置点击事件
	}

	// 打开之前先检验key的正确与否
	private void initsdk() {
		// 注册广播
		filter = new IntentFilter();
		filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);// 网络连接错误
		filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);// 校验失败
		registerReceiver(new Mybraodcast(), filter);
		SDKInitializer.initialize(getApplicationContext());
	}

	class Mybraodcast extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();
			// 判断是否成功

			if (isNetworkAvailable(MainActivity.this)) {
				if (action
						.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
					Toast.makeText(getApplicationContext(), "校验错误。请检查校验码是否正确。",
							Toast.LENGTH_LONG).show();
				} else {
					if (action
							.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
						Toast.makeText(getApplicationContext(),
								"网络错误。请检查网络是否在正常。", Toast.LENGTH_LONG).show();
					}
				}
			}
		}

	}

	// 设置地图图层
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		switch (keyCode) {
		case KeyEvent.KEYCODE_1:
			map.setMapType(BaiduMap.MAP_TYPE_NORMAL);// 底图
			map.setTrafficEnabled(false);// 关闭交通图
			break;
		case KeyEvent.KEYCODE_2:
			map.setMapType(BaiduMap.MAP_TYPE_SATELLITE);// 卫星地图
			map.setTrafficEnabled(false);// 关闭交通图
			break;
		case KeyEvent.KEYCODE_3:
			map.setTrafficEnabled(true);// 打开交通图
			break;
		case KeyEvent.KEYCODE_4:
			MapStatusUpdate zoomin = MapStatusUpdateFactory.zoomIn();// 一级一级缩放
			// 放大
			map.setMapStatus(zoomin);
			break;
		case KeyEvent.KEYCODE_5:
			MapStatusUpdate zoomout = MapStatusUpdateFactory.zoomOut();// 一级一级缩放
			// 缩小
			map.setMapStatus(zoomout);
			break;
		case KeyEvent.KEYCODE_6:
			float jiaodu = map.getMapStatus().rotate;
			MapStatus roates = new MapStatus.Builder().rotate(jiaodu + 15)
					.build();
			MapStatusUpdate roate = MapStatusUpdateFactory.newMapStatus(roates);
			// 旋转
			map.setMapStatus(roate);
			break;
		case KeyEvent.KEYCODE_7:
			float jiaodus = map.getMapStatus().overlook;
			MapStatus roatelines = new MapStatus.Builder()
					.overlook(jiaodus - 5).build();
			MapStatusUpdate roateline = MapStatusUpdateFactory
					.newMapStatus(roatelines);
			// 一条线旋转
			map.setMapStatus(roateline);
			break;
		case KeyEvent.KEYCODE_8:
			MapStatusUpdate move = MapStatusUpdateFactory.newLatLng(new LatLng(
					39.9899560000, 116.3230660000));// 中关村地铁经纬度坐标
			// 移动
			map.animateMapStatus(move);
			break;
		case KeyEvent.KEYCODE_9:
			MapStatusUpdate center = MapStatusUpdateFactory.newLatLng(point);
			// 设置默认中心店
			map.setMapStatus(center);
			break;
		}
		return super.onKeyDown(keyCode, event);
	}

	/**
	 * 检测网络是否可用
	 * 
	 * @return
	 */
	// public boolean isNetworkConnected() {
	// ConnectivityManager cm = (ConnectivityManager)
	// getSystemService(Context.CONNECTIVITY_SERVICE);
	// NetworkInfo ni = cm.getActiveNetworkInfo();
	// return ni != null && ni.isConnectedOrConnecting();
	// }

	public static boolean isNetworkAvailable(Activity activity) {
		Context context = activity.getApplicationContext();
		// 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
		ConnectivityManager connectivityManager = (ConnectivityManager) context
				.getSystemService(Context.CONNECTIVITY_SERVICE);

		if (connectivityManager == null) {
			return false;
		} else {
			// 获取NetworkInfo对象
			NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();

			if (networkInfo != null && networkInfo.length > 0) {
				for (int i = 0; i < networkInfo.length; i++) {
					// 判断当前网络状态是否为连接状态
					if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) {
						return true;
					}
				}
			}
		}
		return false;
	}

	// 在中心点地图位置写文字标注信息
	private void drawtext() {
		TextOptions text = new TextOptions();
		text.position(point).// 需要标注的点的经纬度
				bgColor(0x01ffffff).// 文字背景色
				fontColor(0x99ff0000).// 文字颜色
				fontSize(24).// 字体大小
				text("北京创和世纪通讯技术股份有限公司").// 文字信息
				typeface(Typeface.MONOSPACE).// 安卓字体
				rotate(0);// .visible(false);//旋转45°,隐藏文字信息
		map.addOverlay(text);// 将文字信息添加到地图上面
	}

	/**
	 * 画图片在地图上面
	 */
	private void drawpictuer() {
		MarkerOptions pictuer = new MarkerOptions();
		// 设置坐标位置
		pictuer.position(new LatLng(weidu + 0.005, jindu - 0.0005))
				.title("扬宏豕慧官方店铺(长按此处可以搜索全局\n点击此处可隐藏搜索框)")
				.icon(BitmapDescriptorFactory.fromResource(R.drawable.caiguan));
		map.addOverlay(pictuer);

		pictuer.position(new LatLng(weidu + 0.02, jindu + 0.005))
				.title("扬宏豕慧店铺(长按此处可以搜索全局\n点击此处可隐藏搜索框)")
				.icon(BitmapDescriptorFactory.fromResource(R.drawable.caiguan))
				.draggable(true);// 可以被拖拽
		map.addOverlay(pictuer);

		ArrayList<BitmapDescriptor> pic = new ArrayList<BitmapDescriptor>();
		pic.add(BitmapDescriptorFactory.fromResource(R.drawable.caiguan));
		pic.add(BitmapDescriptorFactory.fromResource(R.drawable.ya));
		pic.add(BitmapDescriptorFactory.fromResource(R.drawable.wifi));
		pic.add(BitmapDescriptorFactory.fromResource(R.drawable.jia));
		pictuer.position(new LatLng(weidu + 0.002, jindu - 0.0085))
				.title("扬宏豕慧周黑鸭(长按此处可以搜索全局\n点击此处可隐藏搜索框)").icons(pic)
				.draggable(true);// 可以被拖拽
		map.addOverlay(pictuer);

	}

	/**
	 * 设置覆盖物的点击事件
	 */

	@Override
	public boolean onMarkerClick(Marker marker) {
		MapViewLayoutParams params = new MapViewLayoutParams.Builder()
				.layoutMode(MapViewLayoutParams.ELayoutMode.mapMode)
				.position(marker.getPosition())
				.width(MapViewLayoutParams.WRAP_CONTENT)
				.height(MapViewLayoutParams.WRAP_CONTENT).yOffset(-40).// 标示在点中的物体上面10距离
				build();
		mv_maptest.updateViewLayout(dialog_tv, params);
		tv_dialog.setText(marker.getTitle());
		dialog_tv.setVisibility(View.VISIBLE);// 点击后显示对话框
		return true;// 标示消费
	}

	// 卫星图切换功能
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.bt_putong:
			map.setMapType(BaiduMap.MAP_TYPE_NORMAL);// 底图
			map.setTrafficEnabled(false);// 关闭交通图
			break;
		case R.id.bt_weixing:
			map.setMapType(BaiduMap.MAP_TYPE_SATELLITE);// 卫星地图
			map.setTrafficEnabled(false);// 关闭交通图
			break;
		case R.id.bt_jiaotong:
			map.setTrafficEnabled(true);// 打开交通图
			break;
		case R.id.ib_da:
			MapStatusUpdate zoomin = MapStatusUpdateFactory.zoomIn();// 一级一级缩放
			// 放大
			map.setMapStatus(zoomin);// 放大地图
			break;
		case R.id.ib_xiao:
			MapStatusUpdate zoomout = MapStatusUpdateFactory.zoomOut();// 一级一级缩放
			// 缩小
			map.setMapStatus(zoomout);// 缩小地图
			break;
		case R.id.tv_dialog:
			// ll_search.setVisibility(View.GONE);// 隐藏搜索框
			// 弹出附近搜索框
			showDialog_NearSearch();
			break;
		case R.id.bt_nearsearch:
			// 附近查找功能
			nearSearchOk();
			break;
		case R.id.bt_xiayiye:
			// 显示下一页数据
			// Toast.makeText(getApplicationContext(), "下一页数据",
			// Toast.LENGTH_LONG).show();
			index++;
			dialog_edittext_city_search();
			break;
		case R.id.bt_shangyiye:
			if (index >= 1) {
				index--;
			} else {
				index = 0;
				Toast.makeText(getApplicationContext(), "已经是首页了。",
						Toast.LENGTH_SHORT).show();
			}
			dialog_edittext_city_search();
			break;
		case R.id.ib_location:
			//点击后调头定位方法
			initLocation();
//			BitmapDescriptor location_icon = BitmapDescriptorFactory.fromResource(R.drawable.dingwei_icon);//自定义定位图标
			MyLocationConfiguration config = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.FOLLOWING, true, null);//null表示默认图标
			//点击后让定位点回到地图中心
			map.setMyLocationConfigeration(config);
			//恢复默认缩放
			MapStatusUpdate zoom = MapStatusUpdateFactory.zoomTo(16);// 设置地图默认缩放比例为10(默认为12)
			map.setMapStatus(zoom);
			open  = true;
			if (open) {
				mv_maptest.showScaleControl(true);//打开标尺
			}
		}
	}

	/**
	 * 区分对话框附近搜索。城市搜索,范围内搜索方法
	 */
	private void dialog_edittext_city_search() {
		if (isShow) {
			// 当点击附近搜索按钮的时候拿到数据进行查找
			near_result = et_nearsearch.getText().toString().trim();
			if (!near_result.equals("") && !near_result.equals(null)) {
				// 将输入框设置为空
				et_serach.setText(near_result);
				nearSearch();
				Toast.makeText(MainActivity.this, "搜索情况如下:", Toast.LENGTH_LONG)
						.show();
				// 自动关闭对话框
				alertDialog.dismiss();
				isShow = false;
			}
		}
		// 拿到输入框的内容
		et_result = et_serach.getText().toString().trim();
		// 搜索之前判断数据是否可用
		if (et_result.contains("_")) {
			// 如果是城市搜索格式。走城市搜索方法
			// 切割数据
			String[] split = et_result.split("_");
			str_city = split[0];
			str_search = split[1];
			citySearch();
		} else {
			// 不是城市搜索格式,走范围内搜索方法
			// 搜索资源
			serachrescours();
		}
		// citySearch();//再次调用城市搜索方法
		// break;
	}

	/**
	 * 弹出附近搜索对话框
	 */
	private void showDialog_NearSearch() {
		AlertDialog.Builder alert = new Builder(this);
		if (poiInfo != null) {
			dialog = alert.setTitle("附近查找").setMessage(poiInfo.address);
		} else {
			dialog = alert.setTitle("附近查找").setMessage(point.toString());
		}
		View nearserach_view = View.inflate(getApplicationContext(),
				R.layout.activity_nearsearch, null);
		Button bt_nearsearch = (Button) nearserach_view
				.findViewById(R.id.bt_nearsearch);
		et_nearsearch = (EditText) nearserach_view
				.findViewById(R.id.et_nearserach);
		bt_nearsearch.setOnClickListener(this);
		alert.setView(nearserach_view);

		// 缩放动画
		ScaleAnimation scanim = new ScaleAnimation(0, 1, 0, 1,
				Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1.0f);
		scanim.setDuration(4000);// 四秒钟
		nearserach_view.startAnimation(scanim);
		alertDialog = dialog.create();
		alertDialog.setView(nearserach_view);
		alertDialog.show();
		// 当对话框出来后做标示
		isShow = true;
	}

	private void nearSearchOk() {
		// 当点击搜索按钮的时候拿到数据进行查找
		near_result = et_nearsearch.getText().toString().trim();
		// 判断是否为空
		if (!near_result.equals("") && !near_result.equals(null)) {
			nearSearch();
			Toast.makeText(MainActivity.this, "搜索情况如下:", Toast.LENGTH_LONG)
					.show();
			// 自动关闭对话框
			alertDialog.dismiss();
		} else {
			Toast.makeText(MainActivity.this, "请输入数据再点击查询按钮", Toast.LENGTH_LONG)
					.show();
		}
	}

	private void nearSearch() {
		PoiSearch poiS = PoiSearch.newInstance();// 创建对象
		poiS.setOnGetPoiSearchResultListener(new Mypoisearch());
		PoiNearbySearchOption pso = new PoiNearbySearchOption();
		pso.keyword(near_result)
				.location(new LatLng(latitude_result, longitude_result))
				.radius(10000);
		// 设置下一页数据
		pso.pageNum(index);
		// 设置清除上一页显示的数据
		map.clear();
		// 发起范围内搜索
		poiS.searchNearby(pso);
	}

	/**
	 * 城市内搜索
	 */
	private void citySearch() {
		PoiSearch citys = PoiSearch.newInstance();
		citys.setOnGetPoiSearchResultListener(new Mypoisearch());
		PoiCitySearchOption pcso = new PoiCitySearchOption();
		// 设置搜索范围城市
		pcso.city(str_city).keyword(str_search);
		pcso.pageNum(index);// 设置当前第几页
		citys.searchInCity(pcso);// 发起城市搜索
	}

	@SuppressWarnings("deprecation")
	@Override
	public boolean onLongClick(View v) {
		switch (v.getId()) {
		case R.id.ib_da:
			ll_suofang.setVisibility(View.GONE);// 隐藏缩放按钮
			break;
		case R.id.bt_putong:
			llweixing.setVisibility(View.GONE);// 隐藏卫星地图切换
			break;
		case R.id.tv_dialog:
			ll_search.setVisibility(View.VISIBLE);// 显示搜索框
			llweixing.setVisibility(View.VISIBLE);// 显示维修地图按钮
			ll_suofang.setVisibility(View.VISIBLE);// 显示缩放按钮
			break;
		case R.id.bt_search:
			// 设置标示驾车还是路线换乘
			jiache_huancheng = jiache;
			// ll_search.setVisibility(View.GONE);// 隐藏搜索框
			// 跳到路线搜索页面
			View inflate_road_search = View.inflate(getApplicationContext(),
					R.layout.activity_road_search, null);
			et_search_start = (EditText) inflate_road_search
					.findViewById(R.id.et_search_start);
			et_search_end = (EditText) inflate_road_search
					.findViewById(R.id.et_search_end);
			et_search_middle = (EditText) inflate_road_search
					.findViewById(R.id.et_search_middle);
			Button et_search_ok = (Button) inflate_road_search
					.findViewById(R.id.et_search_ok);
			rg_jiache_huancheng = (RadioGroup) inflate_road_search
					.findViewById(R.id.rg_jiache_huancheng);
			// 隐藏换乘布局
			rg_jiache_huancheng.setVisibility(View.GONE);
			// 初始化换乘控件
			rg_group = (RadioGroup) inflate_road_search
					.findViewById(R.id.rg_group);
			rb_transtrate_road1 = (RadioButton) inflate_road_search
					.findViewById(R.id.rb_transtrate_road1);
			rb_transtrate_road2 = (RadioButton) inflate_road_search
					.findViewById(R.id.rb_transtrate_road2);
			rb_nosubway = (RadioButton) inflate_road_search
					.findViewById(R.id.rb_nosubway);
			rb_time_first = (RadioButton) inflate_road_search
					.findViewById(R.id.rb_time_first);
			rb_little_transtrate = (RadioButton) inflate_road_search
					.findViewById(R.id.rb_little_transtrate);
			rb_little_walking = (RadioButton) inflate_road_search
					.findViewById(R.id.rb_little_walking);
			rb_transtrate_road1.setBackgroundColor(Color.rgb(238, 169, 184));
			AlertDialog.Builder road_dialog = new Builder(this);
			road_dialog.setView(inflate_road_search);
			create_road = road_dialog.create();
			// 设置换乘点击事件
			// create_road.show();// 显示对话框
			rg_group.setOnCheckedChangeListener(new OnCheckedChangeListener() {

				@Override
				public void onCheckedChanged(RadioGroup group, int checkedId) {
					// 设置两个背景选中色
					switch (checkedId) {
					case R.id.rb_transtrate_road1:
						et_search_middle.setVisibility(View.VISIBLE);// 打开中途必须经过地
						// 设置标示驾车还是路线换乘
						jiache_huancheng = jiache;
						rb_transtrate_road1.setBackgroundColor(Color.rgb(238,
								169, 184));
						rb_transtrate_road2.setBackgroundColor(0x99ffffff);
						rg_jiache_huancheng.setVisibility(View.GONE);
						break;
					case R.id.rb_transtrate_road2:
						et_search_middle.setVisibility(View.GONE);// 隐藏中途必须经过地
						// 设置标示驾车还是路线换乘
						jiache_huancheng = huancheng;
						// 当选择了换乘,那就默认换乘方式为无地铁
						transfer_mode = 0;
						// 切换fragment
						// getSupportFragmentManager().beginTransaction().replace(R.id.ll_jiache,
						// new TranstrateFragment()).commit();
						rg_jiache_huancheng.setVisibility(View.VISIBLE);
						rb_transtrate_road1.setBackgroundColor(0x99ffffff);
						rb_transtrate_road2.setBackgroundColor(Color.rgb(238,
								169, 184));
						// 第一个默认绿色
						rb_nosubway.setBackgroundColor(Color.rgb(144, 238, 144));

						// 设置换乘方式标示
						rg_jiache_huancheng
								.setOnCheckedChangeListener(new OnCheckedChangeListener() {

									@Override
									public void onCheckedChanged(
											RadioGroup group, int checkedId) {
										// 其他三个恢复初始化白色
										rb_nosubway
												.setBackgroundColor(0x99ffffff);
										rb_time_first
												.setBackgroundColor(0x99ffffff);
										rb_little_transtrate
												.setBackgroundColor(0x99ffffff);
										rb_little_walking
												.setBackgroundColor(0x99ffffff);
										switch (checkedId) {
										case R.id.rb_nosubway:
											transfer_mode = 0;
											rb_nosubway.setBackgroundColor(Color
													.rgb(144, 238, 144));
											break;
										case R.id.rb_time_first:
											transfer_mode = 1;
											rb_time_first.setBackgroundColor(Color
													.rgb(144, 238, 144));
											break;
										case R.id.rb_little_transtrate:
											transfer_mode = 2;
											rb_little_transtrate.setBackgroundColor(Color
													.rgb(144, 238, 144));
											break;
										case R.id.rb_little_walking:
											transfer_mode = 3;
											rb_little_walking.setBackgroundColor(Color
													.rgb(144, 238, 144));
											break;
										}
									}
								});
						break;
					}
					// 设置默认选中驾车按钮
					// rg_group.check(R.id.rb_transtrate_road1);
				}
			});
			// 设置点击事件
			et_search_ok.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					// 拿到搜索框数据判断搜索
					trim_start = et_search_start.getText().toString().trim();
					trim_end = et_search_end.getText().toString().trim();
					trim_middle = et_search_middle.getText().toString().trim();
					// 判断中途经过的地方是否为空
					if (!trim_middle.equals("") && trim_middle != null) {
						// 判断格式是否正确
						if (trim_middle.contains("_")) {
							// 切割
							String[] split_result = trim_middle.split("_");
							// 判断输入长度
							if (split_result.length == 1) {
								split_city = split_result[0];
								split_splans = "";
							} else if (split_result.length > 1) {
								split_city = split_result[0];
								split_splans = split_result[1];
							}
						} else {
							Toast.makeText(getApplicationContext(),
									"中途必过地点格式输入有误!\n例如:北京_西直门",
									Toast.LENGTH_SHORT).show();
							return;
						}
					}
					// 判断两个数据
					if (!trim_start.equals("") && !trim_start.equals(null)
							&& !trim_end.equals("") && !trim_end.equals(null)) {
						// 将输入框的两个数据传到路线查找框中
						map.clear();// 搜索之前清除之前的搜索路线
						// 判断是驾车还是换乘
						if (jiache_huancheng == jiache) {
							// 走驾车方法
							driverPlan(split_city, split_splans, trim_start,
									trim_end);
						} else if (jiache_huancheng == huancheng) {
							// 走换乘方法transfer_mode标示
							translateroad("北京", trim_start, trim_end,
									transfer_mode);
						}
						// 隐藏对话框
						create_road.dismiss();
					} else {
						Toast.makeText(getApplicationContext(),
								"请输入起始终点在进行查询。", Toast.LENGTH_SHORT).show();
					}
				}
			});
			create_road.show();// 显示对话框

			// WindowManager.LayoutParams params =
			// create_road.getWindow().getAttributes();
			// params.width = LayoutParams.MATCH_PARENT;
			// params.height = 400 ;
			// create_road.getWindow().setAttributes(params);
			/*
			 * 将对话框的大小按屏幕大小的百分比设置
			 */
			WindowManager m = getWindowManager();
			Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
			WindowManager.LayoutParams p = create_road.getWindow()
					.getAttributes(); // 获取对话框当前的参数值
			p.height = (int) (d.getHeight() * 0.5); // 高度设置为屏幕的0.6
			p.width = (int) (d.getWidth() * 1.0); // 宽度设置为屏幕的0.65
			create_road.getWindow().setAttributes(p);

			// Window window = create_road.getWindow();
			// WindowManager.LayoutParams lp = window.getAttributes();
			// lp.gravity = Gravity.CENTER;
			// lp.width = LayoutParams.MATCH_PARENT;//宽高可设置具体大小
			// lp.height = LayoutParams.MATCH_PARENT;
			// create_road.getWindow().setAttributes(lp);
			break;
		case R.id.bt_xiayiye:
			bt_xiayiye.setVisibility(View.GONE);
			bt_shangyiye.setVisibility(View.GONE);
			llweixing.setVisibility(View.VISIBLE);// 隐藏下一页,显示卫星按钮
			break;
		// case R.id.ib_xiao:
		// // 初始化驾车路线
		// driverPlan("北京", "", "生命科学园", "军事博物馆");
		}
		return true;
	}

	/**
	 * 定位的方法
	 */
	private void initLocation() {
		LocationClientOption option = new LocationClientOption();
		option.setLocationMode(LocationMode.Hight_Accuracy);// 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
		option.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系
		int span = 1000;
		option.setScanSpan(span);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
		option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要
		option.setOpenGps(true);// 可选,默认false,设置是否使用gps
		option.setLocationNotify(true);// 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
		option.setIsNeedLocationDescribe(true);// 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
		option.setIsNeedLocationPoiList(true);// 可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
		option.setIgnoreKillProcess(false);// 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
		option.SetIgnoreCacheException(false);// 可选,默认false,设置是否收集CRASH信息,默认收集
		option.setEnableSimulateGps(false);// 可选,默认false,设置是否需要过滤gps仿真结果,默认需要
		mLocationClient.setLocOption(option);
	}
	@Override
	protected void onStart() {
		//开启定位
		mLocationClient.start();
		super.onStart();
	}
	@Override
	protected void onPause() {
		//失去焦点的时候,停止定位,省电,省流量
		mLocationClient.stop();
		mv_maptest.onPause();
		mv_maptest.showScaleControl(false);//关闭标尺
		super.onPause();
	}
	@Override
	protected void onResume() {
		mv_maptest.onResume();
		super.onResume();
	}
	@Override
	protected void onDestroy() {
		mv_maptest.onDestroy();
		super.onDestroy();
	}
	public class MyLocationListeners implements BDLocationListener{

		@Override
		public void onReceiveLocation(BDLocation location_result) {
			//拿到定位的经纬度
			location_latitude = location_result.getLatitude();
			location_longitude = location_result.getLongitude();
			MyLocationData location_data = new MyLocationData.Builder().latitude(location_latitude).longitude(location_longitude).build();
			//在定位生效之前调用下面一句。地图层生效
			map.setMyLocationEnabled(true);//打开图层
			map.setMyLocationData(location_data);
		}

	}
}

 

 

 

 

 

在贴出XML资源文件:

 

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <com.baidu.mapapi.map.MapView
        android:id="@+id/mv_maptest"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </com.baidu.mapapi.map.MapView>

    <LinearLayout
        android:id="@+id/ll_serach"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <!-- ##e0ffffff半透明背景色颜色   android:alpha="0.5"透明方法 -->

        <EditText
            android:id="@+id/et_serach"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:alpha="0.5"
            android:gravity="center"
            android:hint="城市搜索格式:北京_加油站\n(长按可搜索路线)"
            android:textSize="16sp" />

        <Button
            android:id="@+id/bt_search"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:alpha="0.5"
            android:text="搜索/路线" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/llweixing"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:alpha="0.5" >

        <Button
            android:id="@+id/bt_putong"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="普通地图" />

        <Button
            android:id="@+id/bt_weixing"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="卫星地图" />

        <Button
            android:id="@+id/bt_jiaotong"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="交通地图" />
    </LinearLayout>

    <Button
        android:layout_alignParentLeft="true"
        android:layout_margin="3dp"
        android:id="@+id/bt_shangyiye"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:alpha="0.5"
        android:text="上一页" />
    <Button
        android:layout_margin="3dp"
        android:id="@+id/bt_xiayiye"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:alpha="0.5"
        android:text="下一页" />

    <LinearLayout
        android:id="@+id/ll_suofang"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerInParent="true"
        android:layout_marginRight="5dp"
        android:orientation="vertical" >

        <ImageButton
            android:id="@+id/ib_da"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:alpha="0.5"
            android:src="@drawable/da" />

        <ImageButton
            android:id="@+id/ib_xiao"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp"
            android:alpha="0.5"
            android:src="@drawable/xiao" />
    </LinearLayout>
    <ImageButton 
        android:id="@+id/ib_location"
        android:alpha="0.5"
        android:layout_marginBottom="60dp"
        android:layout_marginRight="5dp"
        android:layout_alignParentRight="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/dingwei"
        android:layout_above="@+id/bt_xiayiye"
        android:layout_alignParentBottom="true"
        />

</RelativeLayout>

 

 

 

最后贴出配置文件的源码:

 

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.yhsh.maptest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <!-- 这个权限用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
    </uses-permission>
    <!-- 这个权限用于访问GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
    </uses-permission>
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
    </uses-permission>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
    </uses-permission>
    <!-- 用于读取手机当前的状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" >
    </uses-permission>
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    </uses-permission>
    <!-- 访问网络,网络定位需要上网 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- SD卡读取权限,用户写入离线定位数据 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
    </uses-permission>
    <!-- 允许应用读取低级别的系统日志文件 -->
    <uses-permission android:name="android.permission.READ_LOGS" >
    </uses-permission>
<!-- android:theme="@android:style/Theme.NoTitleBar"  -->
    <application
        android:name="utils.QuanjuContext"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar" >
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="换成自己的appkey即可" />

        <activity
            android:name="cn.yhsh.maptest.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 


上面的可能新手看起来很乱,这个是主要源码部分,经供参考。

 

点击下载源码下载

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值