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的更多相关文章

  1. 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 ...

  2. 03、NetCore2.0下Web应用之搭建最小框架

    03.NetCore2.0下Web应用之搭建最小框架 这里我们不使用VS2017或者CLI命令的方式创建Asp.Net Core 2.0网页应用程序,而是完全手工的一点点搭建一个Web框架,以便更好的 ...

  3. 03、IDEA下Spark API编程

    03.IDEA下Spark API编程 3.1 编程实现Word Count 3.1.1 创建Scala模块 3.1.2 添加maven支持,并引入spark依赖 <?xml version=& ...

  4. 03、MySql的数据类型

    MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 1.数字类型 类型 大小 范围(有符号) 范围(无符号) ...

  5. [Intel Edison开发板] 03、Edison开发IDE入门及跑官方提供的DEMO

    一.启动Eclipse爱迪生开发板IDE eclipse开发环境在iss-iot-win_03-14-16中,但是一定每次都是点bat脚本启动,否则就会少东西(windows->preferen ...

  6. 03、AngularJs的模块与控制器

    大部分的应用程序都有一个主方法(main)来组织,实例化,启动应用程序.而AngularJs应用是没有主方法的,它是通过模块来声明应用应该如何启动的.同时,模块允许声明来描述应用中依赖关系,以及如何进 ...

  7. ML 03、机器学习的三要素

    机器学习算法原理.实现与实践——机器学习的三要素 1 模型 在监督学习中,模型就是所要学习的条件概率分布或决策函数.模型的假设空间包含所有可能的条件概率分布或决策函数.例如,假设决策函数是输入变量的线 ...

  8. 3 视频里weekend05、06、07的可靠性 + HA原理、分析、机制 + weekend01、02、03、04、05、06、07的分布式集群搭建

    现在,我们来验证分析下,zookeeper集群的可靠性 现在有weekend05.06.07 将其一个关掉, 分析,这3个zookeeper集群里,杀死了weekend06,还存活weekend05. ...

  9. 03、操作RDD(transformation和action案例实战)

    1.transformation和action介绍 Spark支持两种RDD操作:transformation和action.transformation操作会针对已有的RDD创建一个新的RDD:而a ...

随机推荐

  1. JSONP 应用

    受限于浏览器的同源安全策略, js 无法发起跨域的请求. 但是 HTML 中的 <script> 标签却可以引入跨域的文件使用. 而 JSONP 就是利用 <script> 的 ...

  2. 「 Luogu P1231 」 教辅的组成

    题目大意 有 $\text{N1}$ 本书 $\text{N2}$本练习册 $\text{N3}$本答案,一本书只能和一本练习册和一本答案配对.给你一些书和练习册,书和答案的可能的配对关系.问你最多可 ...

  3. 【eclipse】外部 jar 包导入教程

    JavaWeb 项目中,可以直接将要导入的 jar 程序包复制到你项目下的 WEB-INF/lib 文件夹下,将来程序移动到别的机子上测试时也能正常运行.如果是普通 Java 工程的话,我们可以在项目 ...

  4. 二: 安装centos服务环境软件mysql httpd php

    安装mysql--------------------------------------wget http://dev.mysql.com/get/mysql-community-release-e ...

  5. 07.C语言:结构体、共用体、枚举

    一.结构体 是一种复合的数据类型,由多个不同类型的数据(为结构体的成员)组成的集合. 在c语言中没有给出结构体这种类型具体的形式(名称),但是给出类定义该结构体类型的方法(格式). 在使用结构体类型时 ...

  6. 洛谷 3398 仓鼠找sugar 【模板】判断树上两链有交

    [题解] 题意就是判断树上两条链是否有交.口诀是“判有交,此链有彼祖”.即其中一条链的端点的Lca在另一条链上. 我们设两条链的端点的Lca中深度较大的为L2,对L2与另一条链的两个端点分别求Lca, ...

  7. 【Codeforces 992B】Nastya Studies Informatics

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 因为gcd(a,b)=x 所以设a = nx b = mx 又有ab/gcd(a,b)=lcm(a,b)=y 则nmx = y 即n(m*x) ...

  8. 【Codeforces 404C】Restore Graph

    [链接] 我是链接,点我呀:) [题意] 每个节点的度数不超过k 让你重构一个图 使得这个图满足 从某个点开始到其他点的最短路满足输入的要求 [题解] 把点按照dep的值分类 显然只能由dep到dep ...

  9. C语言试题

    C语言试题 [说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC6.0编 ...

  10. 学习——Git及VersionControl

    一.Git基本介绍 1.Git是什么? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.用以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus To ...