03、HelleBaiduMap
D:\百度地图\百度地图\资料\百度地图与定位SDK\百度地图v3.5.0\BaiduMap_AndroidSDK_v3.5.0_All\BaiduMap_AndroidSDK_v3.5.0_Docs\doc\index.html
public final class MapView
extends ViewGroup
ViewGroup是一个ViewGroup,是一个容器,学自定义View的时候我们就知道如果是一个容器代表说它里面可以装很多其他的子控件.
addView本来ViewGroup它就有,为什么要搞一个addView()呢?这里有一个LayoutParams params,肯定是说参数它不一样.如果说都一样的话用ViewGroup的addView()就行了.以后我们要给覆盖物添加一个Mark就用addView().
setScaleControlPosition可以设置比例尺的位置.
getMap()它能获取到一个地图的控制器,它能控制什么内容呢?我们顺藤摸瓜点进去看看它里面有什么方法?
有很多监听器.方法太多了,所以我们这里看几个比较主要的一些方法就行了.
获取地图最大缩放级别.它最大能放到到多少,最小又能缩小到多少?
08-01 12:36:42.026: I/HelloBaiduMapActivity(1541): minZoomLevel = 3.0, maxZoomLevel20.0.最大缩放级别是20.0,最小缩放级别是3.0.
- //MapStatusUpdate mapStatusUpdate = new HelloBaiduMapActivity();//MapStatusUpdate是没有构造方法的,所以你Alt+/ new不出来.
以前学Java基础的时候,有一些类如果没有构造方法那么它可能会有工厂类.
- public static MapStatusUpdate newLatLng(LatLng latLng) new一个经纬度.
设置地图新状态
MapStatusUpdateFactory.newMapStatus(MapStatus mapStatus)
BaiduMap是我们地图的一个控制器.就是控制这个地图要干嘛的.
animateMapStatus(MapStatusUpdate update, int durationMs)以动画方式更新地图状态.int durationMs是指定动画的时间,这是一个毫秒值.
360度其实就是0度.说明旋转角度是从0度到360度的.
俯仰之后就能看到一个3D立体效果.俯仰角度最大不是负50度,最大是负45度.
这个是百度地图最基础的功能.
- package com.itheima.baidumap74;
- //Ctrl+Shift+O清除多余的包名.
- //import com.baidu.mapapi.SDKInitializer;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.KeyEvent;
- import com.baidu.mapapi.SDKInitializer;
- import com.baidu.mapapi.map.BaiduMap;
- 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.model.LatLng;
- public class HelloBaiduMapActivity extends BaseActivity {
- // 常量要放在最前面.
- /** 黑马坐标(北京市海淀区东北旺南路45号) */
- protected LatLng hmPos = new LatLng(40.050513, 116.30361);// LatLng的一个常量表示.
- /** 传智坐标 */
- protected LatLng czPos = new LatLng(40.065817, 116.349902);
- /** 天安门坐标 */
- protected LatLng tamPos = new LatLng(39.915112, 116.403963);
- private static final String TAG = "HelloBaiduMapActivity";// 这个常量我们一般用它的类名就行了.
- private MapView mMapView;
- private BroadcastReceiver receiver;// 把receiver由局部/本地变量变成成员变量
- private BaiduMap baiduMap;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
- // 注意该方法要再setContentView方法之前实现
- // SDKInitializer.initialize(getApplicationContext());
- setContentView(R.layout.activity_main);
- // 获取地图控件引用
- mMapView = (MapView) findViewById(R.id.bmapView);// MapView用于显示
- // 获取地图控制器
- baiduMap = mMapView.getMap();// BaiduMap地图控制器用于控制
- // 这个很明显就是一个MVC模式,你这个地图显示出来之后呢我想改变显示的形状.比如说我想让地图旋转或者说是让地图放大.
- // 就是通过这个控制器来实现.这个是一个标准的MVC模式了.
- // 1. 隐藏缩放按钮、比例尺
- // mMapView.showScaleControl(false);//显示比例控件 隐藏比例按钮
- // 默认是显示比例按钮的.Scale是规模,比例,刻度
- // mMapView.showZoomControls(false);//隐藏缩放按钮,默认是显示缩放按钮的.
- // 2. 获取获取最小(3)、最大缩放级别(20)
- float maxZoomLevel = baiduMap.getMaxZoomLevel();// 获取地图最大缩放级别 用本地/局部变量保存
- float minZoomLevel = baiduMap.getMinZoomLevel();// 获取地图最小缩放级别
- Log.i(TAG, "minZoomLevel = " + minZoomLevel + ", maxZoomLevel"
- + maxZoomLevel);
- // 3. 设置地图中心点为黑马
- // MapStatusUpdate mapStatusUpdate = new
- // HelloBaiduMapActivity();//MapStatusUpdate是没有构造方法的,所以你Alt+/ new不出来.
- MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory
- .newLatLng(hmPos);
- baiduMap.setMapStatus(mapStatusUpdate);// setMapStatus是baiduMap地图控制器的方法.把这个状态传给我这个baiduMap.那我立马就能给你跳到这个位置.
- // 4.设置地图缩放为15
- mapStatusUpdate = MapStatusUpdateFactory.zoomTo(15);// 不new一个经纬度的状态,是new一个缩放的状态.zoomTo是缩放一个绝对值.重复调用zoomTo()它还是缩放到那个数值.
- baiduMap.setMapStatus(mapStatusUpdate);
- }
- // 6.获取地图Ui控制器:隐藏指南针
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- // TODO Auto-generated method stub
- MapStatusUpdate mapStatusUpdate = null;// 在最前面声明一个状态,然后默认值给它一个null
- switch (keyCode) {
- // 5.更新地图状态
- case KeyEvent.KEYCODE_1:
- // 1)缩小
- mapStatusUpdate = MapStatusUpdateFactory.zoomOut();
- break;
- case KeyEvent.KEYCODE_2:
- // 2)放大
- mapStatusUpdate = MapStatusUpdateFactory.zoomIn();
- break;
- case KeyEvent.KEYCODE_3:
- // 3)旋转(0 ~ 360),每次在原来的基础上再旋转30度
- MapStatus currentMapStatus = baiduMap.getMapStatus(); // 获取地图当前的状态.
- float rotate = currentMapStatus.rotate + 30;// 拿出它原来的旋转角度.
- Log.i(TAG, "rotate = " + rotate);//打印旋转角度
- MapStatus mapStatus = new MapStatus.Builder().rotate(rotate).build();// MapStatus不能直接new它因为它没有构造方法,你要new的是它MapStatus.Builder的那个类.最后再
- // 调用build()就能返回地图的一个状态.但是返回之前需要设置一下旋转角度.rotate()设置旋转角度.
- mapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);
- break;
- case KeyEvent.KEYCODE_4:
- // 4)俯仰(0 ~ -45),每次在原来的基础上再俯仰-5度
- currentMapStatus = baiduMap.getMapStatus();// 获取地图当前的状态.
- float overlook = currentMapStatus.overlook - 5;//为什么要俯仰负5度?后面演示的时候再说.因为我们拿出来是45,再减5就变成50了.所以是这个地方误导了一下,误导了.其实俯仰角度最大是负45.为什么要减5?
- //因为它这个只支持负数,你给它一个正数它是看不到俯仰效果的.
- Log.i(TAG, "overlook = " + overlook);//打印俯仰角度
- mapStatus = new MapStatus.Builder().overlook(overlook).build();//MapStatus没有构造方法你只能重新去new它的Builder().然后调一下build()方法它就创建出来这个状态对象.
- //build()之前要进行一个俯仰.overlook()设置俯仰角度.
- mapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);
- break;
- case KeyEvent.KEYCODE_5:
- // 5)移动
- mapStatusUpdate = MapStatusUpdateFactory.newLatLng(czPos);//移动,它是没有move这种方法的.移动的实现是你给它一个位置(经纬度)就行了.
- //移动这个状态呢它是瞬间改变你看不到效果.
- baiduMap.animateMapStatus(mapStatusUpdate, 2000);//animateMapStatus是能看到过程的,以动画的形式改变这个状态.2000ms,让它两秒钟完成.
- return super.onKeyDown(keyCode, event);//一return这个语句就完了它就不会走下面.
- }
- baiduMap.setMapStatus(mapStatusUpdate);//这是瞬间改变看不到过程.
- return super.onKeyDown(keyCode, event);
- }
- @SuppressWarnings("unused")
- private void registerSDKCheckReceiver() {
- // 如果你不注册这个广播假设你这个key错了你也不知道.你可能会认为哪一步错了然后找很久找不到原因.所以我们最好去注册一下这样的一个广播.
- receiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO Auto-generated method stub
- // 如果说接收到广播就会跑到这里面来.
- // 这里面由于我们是有两个action,我们要进行一个判断,先把它们取出来.
- String action = intent.getAction();
- if (SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR
- .equals(action)) {// 首先是这个网络错误,.
- // 显示吐司这种代码很常用,如果说我们有一个base的话呢以后我们显示吐司会非常方便.
- // 这个base类大家应该不陌生.
- // 当我们接收到这一个网络处理故障的广播的时候呢,
- showToast("网络错误");
- } else if (SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR
- .equals(action)) {
- showToast("key验证失败");
- }
- }
- // 因为代码不会很多我就直接new它的内部类了.
- };
- IntentFilter filter = new IntentFilter();// 本地变量,局部变量.IntentFilter是比较关键,也就是说你要拦截哪些广播就通过它来指定.
- // 监听网络错误
- filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);// 广播会以action的方式发出来.这个action从哪里来呢?
- // 我们最主要的还不是监听网络错误,我们需要的是权限检查的错误
- // 监听百度地图sdk 的key是否正确.
- filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
- // 只要这两个广播一发出来,那你这个接收者呢就能接收到
- // 注册接收者
- registerReceiver(receiver, filter);// 接收一个广播接收者BroadcastReceiver,IntentFilter.
- }
- // Ctrl+I格式化
- // 这是百度地图规定的,它mMapView也有生命周期方法,你必须在Activity相应的生命周期方法里面呢去调mMapView对应的生命周期方法.
- // 这个就没什么好记的了,死记硬背就行了.照着调用.
- @Override
- protected void onDestroy() {
- super.onDestroy();
- // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
- mMapView.onDestroy();
- // 解除注册接收者
- unregisterReceiver(receiver);
- }
- @Override
- protected void onResume() {
- super.onResume();
- // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
- mMapView.onResume();
- }
- @Override
- protected void onPause() {
- super.onPause();
- // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
- mMapView.onPause();
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.itheima.baidumap74"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="17" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
- <uses-permission android:name="android.permission.WAKE_LOCK" />
- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- <uses-permission android:name="android.permission.GET_TASKS" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.WRITE_SETTINGS" />
- <!-- 增加读电话状态的权限.这个你不加也无所谓,但是看到报那个黄色异常还是挺不爽的.还是把它加一下. -->
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <application
- android:name=".MyApplication"
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" > <!-- .就代表你前面这个基础的一个包 -->
- <meta-data
- android:name="com.baidu.lbsapi.API_KEY"
- android:value="QaDs6ScFuwxGh75ku6gijqNnBhnXmNqZ" />
- <!--
- 下面这个activity也是一样,简单一点,以.打头就行了.这样看起来会比较简短一点,看起来会比较舒服.
- android:name="com.itheima.baidumap74.MainActivity"
- -->
- <activity
- android:name=".HelloBaiduMapActivity"
- 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>
03、HelleBaiduMap的更多相关文章
- 5 weekend01、02、03、04、05、06、07的分布式集群的HA测试 + hdfs--动态增加节点和副本数量管理 + HA的java api访问要点
weekend01.02.03.04.05.06.07的分布式集群的HA测试 1) weekend01.02的hdfs的HA测试 2) weekend03.04的yarn的HA测试 1) wee ...
- 03、NetCore2.0下Web应用之搭建最小框架
03.NetCore2.0下Web应用之搭建最小框架 这里我们不使用VS2017或者CLI命令的方式创建Asp.Net Core 2.0网页应用程序,而是完全手工的一点点搭建一个Web框架,以便更好的 ...
- 03、IDEA下Spark API编程
03.IDEA下Spark API编程 3.1 编程实现Word Count 3.1.1 创建Scala模块 3.1.2 添加maven支持,并引入spark依赖 <?xml version=& ...
- 03、MySql的数据类型
MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 1.数字类型 类型 大小 范围(有符号) 范围(无符号) ...
- [Intel Edison开发板] 03、Edison开发IDE入门及跑官方提供的DEMO
一.启动Eclipse爱迪生开发板IDE eclipse开发环境在iss-iot-win_03-14-16中,但是一定每次都是点bat脚本启动,否则就会少东西(windows->preferen ...
- 03、AngularJs的模块与控制器
大部分的应用程序都有一个主方法(main)来组织,实例化,启动应用程序.而AngularJs应用是没有主方法的,它是通过模块来声明应用应该如何启动的.同时,模块允许声明来描述应用中依赖关系,以及如何进 ...
- ML 03、机器学习的三要素
机器学习算法原理.实现与实践——机器学习的三要素 1 模型 在监督学习中,模型就是所要学习的条件概率分布或决策函数.模型的假设空间包含所有可能的条件概率分布或决策函数.例如,假设决策函数是输入变量的线 ...
- 3 视频里weekend05、06、07的可靠性 + HA原理、分析、机制 + weekend01、02、03、04、05、06、07的分布式集群搭建
现在,我们来验证分析下,zookeeper集群的可靠性 现在有weekend05.06.07 将其一个关掉, 分析,这3个zookeeper集群里,杀死了weekend06,还存活weekend05. ...
- 03、操作RDD(transformation和action案例实战)
1.transformation和action介绍 Spark支持两种RDD操作:transformation和action.transformation操作会针对已有的RDD创建一个新的RDD:而a ...
随机推荐
- 虚拟机找不到本机vmnet0,vmnet8,无法连接xshell,解决方案
首先出现这个问题肯定是第一次下载虚拟机把之前的注册表覆盖了,网卡找不到,首先卸载VMware 并且将C\ProgramData下的VMware文件夹删除掉 ,下载cceaner,点击注册表清除干净,再 ...
- gearman的安装与使用
Gearman是一个分发任务的程序框架,它会对作业进行排队自动分配到一系列机器上.gearman跨语言跨平台,很方便的实现异步后台任务.php官方收录:http://php.net/manual/zh ...
- ubuntu jdk和tomcat配置
先查看linux的版通过file /sbin/init命令,下载对应版本的jdk. 我的ubuntu是64位的(桌面系统),所以下载的是jdk-7u71-linux-x64.tar.gz 在home的 ...
- JAVA之文件操作1,2,3,4
package first_program; import java.io.File; import java.io.IOException; public class num_1v { public ...
- 51nod 1285 山峰和分段
[题解] 枚举n的各个因数作为段长,O(n)判断每一段内是否有山峰即可. #include<cstdio> #include<cstring> #include<algo ...
- noip模拟赛 传球接力
[问题描述]n 个小朋友在玩传球. 小朋友们用 1 到 n 的正整数编号. 每个小朋友有一个固定的传球对象,第 i 个小朋友在接到球后会将球传给第 ai个小朋友, 并且第 i 个小朋友与第 ai个小朋 ...
- 工资(money)
(money/money.in/money.out) 时限1000ms 内存256MB 聪哥在暑假参加了打零工的活动,这个活动分为n个工作日,每个工作日的工资为Vi.有m个结算工钱的时间,聪哥可以自由 ...
- Jeecg+fixflow,工作流框架分享
工作流引擎使用fixflow. 动态表达使用jeecg. 不多说直接上源码. 注:本人使用的jdk为6.0.mysql.tomcat6.0 其中fixflow-expand 为eclips流程设计核心 ...
- A multiprocessing system including an apparatus for optimizing spin-lock operations
A multiprocessing system having a plurality of processing nodes interconnected by an interconnect ne ...
- php处理管道文件流
<?php #!/usr/local/bin/php -q function read(){ $fp = fopen("php://stdin", "r" ...