本文实例为大家分享了Android百度地图之方向感应和模式更改,供大家参考,具体内容如下

目标效果:

菜单中设置几种模式,点击可查看不同的地图形式,这里随便截几张图。

1.首先要去百度地图网站 http://lbsyun.baidu.com/

2.注册账号后,点击开发->Android地图SDK->获取密钥,进入后显示如下页面。

3.创建应用

4.打开eclipse,选择Window->Preferences->Android->Build,获取SHA1

5.提交后回到上一个Android地图SDK页面选择相关下载,再点击自定义下载

6.选择定位功能,基础地图,检索功能,LBS云检索,计算工具后点击开发包,示例代码和类参考根据自己的实际情况进行下载

7.下载完成后解压如图

8.开始创建应用,注意创建时包名

9.创建好后,把刚才下载的libs目录下所有内容复制到项目libs文件夹中。

10.开始编写代码。activity_main.xml页面放入一个map控件。

activity_main.xml页面:

  

11.main.xml作为菜单页面,增加几个模式选择。

main.xml页面:

                

12.创建MyOrientationListener.java页面用于在方向改变时进行获取。

MyOrientationListener.java页面:

package com.imooc.baidumap; import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager; public class MyOrientationListener implements SensorEventListener {  private SensorManager mSensorManager; private Context context; private Sensor mSensor;// 传感器  private float lastX;  public MyOrientationListener(Context context) { this.context = context; }  // 开启监听 @SuppressWarnings("deprecation") public void start() { //获得系统服务 mSensorManager=(SensorManager) context.getSystemService(Context.SENSOR_SERVICE); if(mSensorManager!=null){  //获得方向传感器  mSensor=mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); } if(mSensor!=null){  mSensorManager.registerListener(this, mSensor,SensorManager.SENSOR_DELAY_UI);//第三个参数为经度 } }  // 结束监听 public void stop() { //停止定位 mSensorManager.unregisterListener(this); }  // 经度发生改变时 @Override public void onAccuracyChanged(Sensor arg0, int arg1) {  }  // 纬度发生改变时 @Override public void onSensorChanged(SensorEvent event) { //如果事件返回的类型是方向传感器 if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){  float x=event.values[SensorManager.DATA_X];  //如果变化大于一度  if(Math.abs(x-lastX)>1.0){  //通知主界面进行回掉  if(mOnOrientationListener!=null){   mOnOrientationListener.onOrientationChanged(x);  }  }  lastX=x; } }   private OnOrientationListener mOnOrientationListener;  public void setmOnOrientationListener(  OnOrientationListener mOnOrientationListener) { this.mOnOrientationListener = mOnOrientationListener; }  //回掉接口 public interface OnOrientationListener{ void onOrientationChanged(float x); }}

13.主页面MainActivity.java页面进行模式更改以及定位等。

MainActivity.java页面:

package com.imooc.baidumap; 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.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MyLocationConfiguration;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationConfiguration;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;import com.imooc.baidumap.MyOrientationListener.OnOrientationListener; import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.MenuItem;import android.view.Window; public class MainActivity extends Activity {  private MapView mv_map; private BaiduMap baiduMap;  // 定位相关 private LocationClient mLocationClient; private MyLocationListener mLocationListener; private boolean isFirstIn = true; private double mLatitude; // 记录最新经纬度 private double mLongtitude;  // 自定义定位图标 private BitmapDescriptor mIconLocation; private MyOrientationListener mOrientationListener; private float mCurrentX;  // 模式变量 private com.baidu.mapapi.map.MyLocationConfiguration.LocationMode mLocationMode;  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);  // 在使用SDK各组件之前初始化context信息,传入ApplicationContext // 注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main);  // 初始化控件 init();  // 初始化定位 initLocation(); }  // 初始化控件 private void init() { mv_map = (MapView) findViewById(R.id.mv_map); baiduMap = mv_map.getMap(); MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);// 设置地图放大比例 baiduMap.setMapStatus(msu); }  @Override protected void onStart() { super.onStart(); baiduMap.setMyLocationEnabled(true); if (!mLocationClient.isStarted()) {  // 开启定位  mLocationClient.start();  // 开启方向传感器  mOrientationListener.start(); } }  @Override protected void onStop() { super.onStop(); baiduMap.setMyLocationEnabled(false); // 停止定位 mLocationClient.stop(); // 停止方向传感器 mOrientationListener.stop(); }  @Override protected void onResume() { super.onResume(); // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mv_map.onResume(); }  @Override protected void onPause() { super.onPause(); // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mv_map.onPause();  }  @Override protected void onDestroy() { super.onDestroy(); // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mv_map.onDestroy(); }  @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); }  // 点击菜单进行切换地图 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.id_map_common: // 普通地图  baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);  break;  case R.id.id_map_site: // 卫星地图  baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);  break;  case R.id.id_map_traffic: // 实时交通  if (baiduMap.isTrafficEnabled()) {  baiduMap.setTrafficEnabled(false);  item.setTitle("实时交通(off)");  } else {  baiduMap.setTrafficEnabled(true);  item.setTitle("实时交通(on)");  }  break; case R.id.id_map_location:  centerToMyLocat();  break; case R.id.id_map_mode_common:  mLocationMode = com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.NORMAL;  break; case R.id.id_map_mode_following:  mLocationMode = com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.FOLLOWING;  break; case R.id.id_map_mode_compass:  mLocationMode = com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.COMPASS;  break; default:  break; } return super.onOptionsItemSelected(item); }  // 定位到我的位置 private void centerToMyLocat() { LatLng latLng = new LatLng(mLatitude, mLongtitude); MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng); baiduMap.animateMapStatus(msu); }  private class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) {  MyLocationData data = new MyLocationData.Builder()//   .direction(mCurrentX)//   .accuracy(location.getRadius())//   .latitude(location.getLatitude())//   .longitude(location.getLongitude())//   .build();  baiduMap.setMyLocationData(data);   // 更新位置  mLatitude = location.getLatitude();  mLongtitude = location.getLongitude();  // 判断是否第一次进入  if (isFirstIn) {  LatLng latLng = new LatLng(location.getLatitude(),   location.getLongitude());  MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);  baiduMap.animateMapStatus(msu);   isFirstIn = false;  }  // 设置自定义图标  MyLocationConfiguration config = new MyLocationConfiguration(   mLocationMode, true, mIconLocation);  baiduMap.setMyLocationConfigeration(config); } }  // 初始化定位 private void initLocation() { mLocationMode = com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.NORMAL; // 默认模式 mLocationClient = new LocationClient(this); mLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(mLocationListener);  LocationClientOption option = new LocationClientOption(); option.setCoorType("bd0911"); option.setIsNeedAddress(true); option.setOpenGps(true); option.setScanSpan(1000);// 每个多少秒进行一次请求  mLocationClient.setLocOption(option); // 初始化图标 mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.arrow);  mOrientationListener = new MyOrientationListener(this);  mOrientationListener  .setmOnOrientationListener(new OnOrientationListener() {    @Override   public void onOrientationChanged(float x) {   mCurrentX = x;   }  }); } }

14.Androidmanifest.xml页面配置权限及添加AppKey。

Androidmanifest.xml页面:

<?xml version="1.0" encoding="utf-8"?>                                                                                                         

15.程序运行就可以显示目标效果了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多相关文章

  1. Android绘图系列(一)——自定义View基础
  2. android -- 小问题 Android(安卓)WebView缓存分析
  3. android使用ViewPager实现欢迎引导页
  4. Android基于nfc的读写(一)
  5. Android(安卓)Webview组件使用总结
  6. Android(安卓)根据系统声音模式设置提醒方式
  7. Android(安卓)GPS 定位的实现(2-1) 使用Google地图
  8. 收集整理 View必须要了解的Android坐标知识
  9. 【Android】WebView加载https页面不能正常显示资源问题

随机推荐

  1. SQL Server中检查字段的值是否为数字的方
  2. SQL Server数据类型char、nchar、varchar
  3. SQLServer行转列实现思路记录
  4. .net+mssql制作抽奖程序思路及源码
  5. sqlserver禁止management studio的自动提
  6. SQL Server 向临时表插入数据示例
  7. MS SQL Server游标(CURSOR)的学习使用
  8. 删除sqlserver数据库日志和没有日志的数
  9. SQL高级应用之同服务器上复制表到另一数
  10. 根据sql脚本修改数据库表结构的几种解决