安卓开发_慕课网_百度地图_实现方向传感器
2014-12-15 20:07
381 查看
学习内容来自“慕课网”
这里学习百度地图方向传感器功能
就是当转动手机的时候,地图上显示个人所在位置的图标的箭头变动
学习接自前两篇
安卓开发_慕课网_百度地图
安卓开发_慕课网_百度地图_实现定位
思路:
传感器随着定位的开始而开启,随着定位的结束而结束
传感器获得位置的移动而更新方向
代码在前两篇的基础上修改
一、讲原本坐标的图标改成箭头图标
二、引入方向传感器
首先增添MainActivity.java中的自定义图标和方向传感器代码
看红色字体的部分
添加方向传感器部分的类
MyLocationListener.java
MyOrientationListener.java
改动以上两部分后便可以看到效果,移动手机方向,坐标箭头方向随之变化
效果图
坐标箭头的素材
这里学习百度地图方向传感器功能
就是当转动手机的时候,地图上显示个人所在位置的图标的箭头变动
学习接自前两篇
安卓开发_慕课网_百度地图
安卓开发_慕课网_百度地图_实现定位
思路:
传感器随着定位的开始而开启,随着定位的结束而结束
传感器获得位置的移动而更新方向
代码在前两篇的基础上修改
一、讲原本坐标的图标改成箭头图标
二、引入方向传感器
首先增添MainActivity.java中的自定义图标和方向传感器代码
看红色字体的部分
package com.example.map; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; 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.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationConfiguration; import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.model.LatLng; import com.example.map.MyOrientationListener.OnOrientationListener; import com.example.map.R; import android.location.Location; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.view.Menu; import android.view.MenuItem; import android.view.Window; import android.widget.Toast; public class MainActivity extends Activity { private MapView mMapView = null; private BaiduMap mBaiduMap; //简化代码 用于this.context=this; private Context context; //定位相关 private LocationClient mLocationClient; private MyLocationListener mLocationListener; //是否第一次定位的标志 private boolean isFirstIn = true; //定位经纬度 private double mLatitude; private double mLongtitude; //自定义定位图标 46 private BitmapDescriptor mIconLocation; 47 private LocationMode mLocationMode;//控制模式 48 private MyOrientationListener myOrientationListener; 49 private float mCurrentX; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); this.context = this; initView(); //初始化定位 initLocation(); } private void initView() { // TODO Auto-generated method stub mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); //设置打开时的显示比列 这里显示500m左右 MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f); mBaiduMap.setMapStatus(msu); } private void initLocation() { // TODO Auto-generated method stub mLocationClient = new LocationClient(this); mLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(mLocationListener); LocationClientOption option = new LocationClientOption(); option.setCoorType("bd09ll"); option.setIsNeedAddress(true); option.setOpenGps(true); option.setScanSpan(1000); mLocationClient.setLocOption(option); 88 89 // 初始化图标 90 mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps_locked); 91 myOrientationListener = new MyOrientationListener(context); 92 myOrientationListener.setOnOrientationListener(new OnOrientationListener() 93 { 94 @Override 95 public void onOrientationChanged(float x) 96 { 97 mCurrentX = x; 98 } 99 }); } //activity销毁时百度地图也销毁 @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); // 开启定位 mBaiduMap.setMyLocationEnabled(true); if (!mLocationClient.isStarted()) mLocationClient.start(); // 开启方向传感器 117 myOrientationListener.start(); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); // 停止定位 mBaiduMap.setMyLocationEnabled(false); mLocationClient.stop(); // 停止方向传感器 128 myOrientationListener.stop(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub getMenuInflater().inflate(R.menu.main, menu); return true; } //菜单按钮的响应事件 @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case R.id.id_map_common: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); break; case R.id.id_map_site: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); break; case R.id.id_map_traffic: if(mBaiduMap.isTrafficEnabled()) { mBaiduMap.setTrafficEnabled(false); item.setTitle("实时交通(off)"); } else { mBaiduMap.setTrafficEnabled(true); item.setTitle("实时交通(on)"); } break; case R.id.id_map_location: //定位最新自己的位置 centerToMyLocation(); break; default: break; } return super.onOptionsItemSelected(item); } //进到自己的位置 private void centerToMyLocation() { LatLng latLng = new LatLng(mLatitude,mLongtitude); MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng); mBaiduMap.animateMapStatus(msu); } private class MyLocationListener implements BDLocationListener{ @Override public void onReceiveLocation(BDLocation location) { // TODO Auto-generated method stub MyLocationData data = new MyLocationData.Builder()// .direction(mCurrentX)// .accuracy(location.getRadius())// .latitude(location.getLatitude())// .longitude(location.getLongitude())// .build(); mBaiduMap.setMyLocationData(data); // 设置自定义图标 202 MyLocationConfiguration config = new MyLocationConfiguration(mLocationMode.NORMAL, true, mIconLocation); 203 mBaiduMap.setMyLocationConfigeration(config); //获取最新经纬度 mLatitude = location.getLatitude(); mLongtitude = location.getLongitude(); //判断是否第一次定位 if (isFirstIn) { //设置经纬度 LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude()); MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng); mBaiduMap.animateMapStatus(msu); //将是否第一次定位的标志 变为不是第一次定位 isFirstIn = false; //显示当前定位的位置 Toast.makeText(context, location.getAddrStr(), Toast.LENGTH_SHORT).show(); } } } }
添加方向传感器部分的类
MyLocationListener.java
package com.example.map; 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 mContext; //传感器 private Sensor mSensor; private float lastX; //构造方法 public MyOrientationListener(Context context) { this.mContext = context; } @SuppressWarnings("deprecation") //开始监听 public void start() { //拿到系统服务 mSensorManager = (SensorManager) mContext.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) { // TODO Auto-generated method stub } @SuppressWarnings( { "deprecation" }) @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 setOnOrientationListener( OnOrientationListener mOnOrientationListener) { this.mOnOrientationListener = mOnOrientationListener; } public interface OnOrientationListener { void onOrientationChanged(float x); } }
MyOrientationListener.java
改动以上两部分后便可以看到效果,移动手机方向,坐标箭头方向随之变化
效果图
坐标箭头的素材
相关文章推荐
- 百度地图的简单开发之方向传感器实现定位功能
- 浅谈百度地图的简单开发之结合方向传感器实现定位功能(三)
- 安卓开发_慕课网_百度地图_实现定位
- 浅谈百度地图的简单开发之结合方向传感器实现定位功能(三)
- 百度地图的简单开发之方向传感器实现定位功能(三)
- 安卓开发_慕课网_百度地图_实现模式转换
- 安卓开发_慕课网_百度地图
- 植入百度地图(二)——实现定位及方向传感器
- 植入百度地图(二)——实现定位及方向传感器
- 安卓开发_慕课网_Fragment实现Tab(App主界面)
- Android移动开发-调用方向传感器与OpenGL开发简易水平仪的实现
- 安卓开发_慕课网_ViewPager实现Tab(App主界面)
- [github项目]基于百度地图二次开发实现的车辆监管(包含车辆定位、车辆图片和方向控制,电子围栏,图形绘制等功能)前端实现(不包含后端实现)
- 关于在安卓开发中百度地图功能不能实现定位。
- 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)
- 安卓开发之方向传感器
- 安卓开发_慕课网_百度地图_添加覆盖物
- Android移动开发-调用方向传感器开发简易指南针的实现
- 百度地图植入android应用系列教程二实现百度地图定位及方向传感器
- 安卓开发_慕课网_百度地图_刮刮涂层效果