安卓开发_慕课网_百度地图_实现模式转换
2014-12-15 22:35
363 查看
学习内容来自“慕课网”
模式转换,即地图的普通模式,罗盘模式,跟随模式之间的转换
学习内容接自前三篇
安卓开发_慕课网_百度地图
安卓开发_慕课网_百度地图_实现定位
安卓开发_慕课网_百度地图_实现方向传感器
一、模式转换通过菜单按钮来控制
所以添加对应的菜单项(红色字体部分)
在MainActivity.java中添加模式转换的代码
效果图:
罗盘模式
跟随模式:
坐标一直显示在界面中心位置
代码是学习的,发现一点Bug
点击罗盘模式后点击左上角指南针图标 无法回到普通模式
在罗盘模式后,点击普通模式,界面不直接显示为普通模式,而要再点击左上角指南针图标后才能回到普通模式
模式转换,即地图的普通模式,罗盘模式,跟随模式之间的转换
学习内容接自前三篇
安卓开发_慕课网_百度地图
安卓开发_慕课网_百度地图_实现定位
安卓开发_慕课网_百度地图_实现方向传感器
一、模式转换通过菜单按钮来控制
所以添加对应的菜单项(红色字体部分)
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/id_map_common" android:showAsAction="never" android:title="普通地图"/> <item android:id="@+id/id_map_site" android:showAsAction="never" android:title="卫星地图"/> <item android:id="@+id/id_map_traffic" android:showAsAction="never" android:title="实时交通(off)"/> <item android:id="@+id/id_map_location" android:showAsAction="never" android:title="定位我的位置"/> <item android:id="@+id/id_mode_commer" 26 android:showAsAction="never" 27 android:title="普通模式"/> 28 <item 29 android:id="@+id/id_mode_following" 30 31 android:showAsAction="never" 32 android:title="跟随模式"/> 33 <item 34 android:id="@+id/id_mode_compass" 35 36 android:showAsAction="never" 37 android:title="罗盘模式"/> </menu>
在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; //自定义定位图标 private BitmapDescriptor mIconLocation; 47 private LocationMode mLocationMode;//定义模式 private MyOrientationListener myOrientationListener; 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); 81 //默认模式为普通型 82 mLocationMode = LocationMode.NORMAL; LocationClientOption option = new LocationClientOption(); option.setCoorType("bd09ll"); option.setIsNeedAddress(true); option.setOpenGps(true); option.setScanSpan(1000); mLocationClient.setLocOption(option); // 初始化图标 mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps_locked); myOrientationListener = new MyOrientationListener(context); myOrientationListener.setOnOrientationListener(new OnOrientationListener() { @Override public void onOrientationChanged(float x) { mCurrentX = x; } }); } //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(); // 开启方向传感器 myOrientationListener.start(); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); // 停止定位 mBaiduMap.setMyLocationEnabled(false); mLocationClient.stop(); // 停止方向传感器 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; 179 case R.id.id_mode_common: 180 //设置普通模式 181 mLocationMode = LocationMode.NORMAL; 182 break; 183 case R.id.id_mode_following: 184 //设置跟随模式 185 mLocationMode = LocationMode.FOLLOWING; 186 break; 187 case R.id.id_mode_compass: 188 //设置罗盘模式 189 mLocationMode = LocationMode.COMPASS; 190 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); // 设置自定义图标 216 MyLocationConfiguration config = new MyLocationConfiguration(mLocationMode, true, mIconLocation); 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(); } } } }
效果图:
罗盘模式
跟随模式:
坐标一直显示在界面中心位置
代码是学习的,发现一点Bug
点击罗盘模式后点击左上角指南针图标 无法回到普通模式
在罗盘模式后,点击普通模式,界面不直接显示为普通模式,而要再点击左上角指南针图标后才能回到普通模式
相关文章推荐
- 安卓开发_慕课网_百度地图_实现方向传感器
- 安卓开发_慕课网_百度地图_实现定位
- 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)
- 安卓开发_慕课网_百度地图_刮刮涂层效果
- 安卓开发观察者模式应用-一个service通知多个activity更新ui的实现
- 安卓开发_慕课网_Fragment实现Tab(App主界面)
- 安卓开发_慕课网_ViewPager实现Tab(App主界面)
- 安卓开发_慕课网_百度地图
- 关于在安卓开发中百度地图功能不能实现定位。
- Android - 开发实例(12):安卓开发中最佳单例模式实现
- 安卓开发_慕课网_百度地图_添加覆盖物
- Java版AVG游戏开发入门[0]——游戏模式转换中的事件交互 推荐
- 开发设计模式 -- Asp.net中实现观察者模式
- 《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-有特权级转换-理论)
- 开发平台的两种实现模式
- IPhone开发学习笔记:单例模式的实现
- 《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-有特权级转换-实践篇)
- 快速开发平台的两种实现模式(转载)
- RGB转换实现代码,淘宝前端开发工程师笔试题
- 两种SVN开发模式实现目录结构布局