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. java求两个集合的交集和并集,比较器

    求连个集合的交集: import java.util.ArrayList; import java.util.List; public class TestCollection { public st ...

  2. Luogu P2822 组合数问题

    思路 组合数的话,首先肯定是想到杨辉三角啊.不傻的都知道要预处理一张组合数表,但是你以为这样就可以了吗???显然,不可能的.那询问的时候复杂度就成了$\large{O(t*n)}$,凉凉.那咋办,用二 ...

  3. HDU - 4803 - Poor Warehouse Keeper (思维)

    题意: 给出x,y两个值分别代表x个物品,总价为y 有两种变化: 1.使总价+1,数量不变 2.数量+1,总价跟着变化 (y = y + y / x) 思路: 给出目标x,y,计算最少变化次使数量变化 ...

  4. Python学习第二阶段Day2,模块time/datetime、random、os、sys、shutil

    1.Time.  Datetime(常用) UTC时间:为世界标准时间,时区为0的时间 北京时间,UTC+8东八区 import time print(time.time()) # timestamp ...

  5. MySQL 查询状态

    查询状态 SHOW FULL PROCESSLIST 对于一个连接,或者说一个线程,任何时刻都有一个状态,该状态表示了MySQL当前正在做什么. mysql>SHOW FULL PROCESSL ...

  6. session 与 cookie 区别-----https://segmentfault.com/a/1190000013447750?utm_source=tag-newest

    cookie数据存放在客户的浏览器上,session数据放在服务器上. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session. sessi ...

  7. ssh登录问题

    ssh username@ip 密码正确但是登陆ssh时permission denied 1.   启动sshd:/etc/init.d/ssh start 2.   在/etc/ssh/sshd_ ...

  8. 将Jquery EasyUI中DataGird的数据导入Excel中

    1.第一步获取前台DataGrid中的数据 var rows = $('#tb).datagrid("getRows");            if (rows.length = ...

  9. 【BZOJ4650&UOJ219】优秀的拆分(二分,hash)

    题意: 思路: 在实现时SA可以用hash+二分代替,会多一个log BZ上跑的飞快,但UOJ上extra卡出翔,已经放弃 不过转C或者写SA没准就过了 看来转C迫在眉睫 ; ..]of int64; ...

  10. HDU——4738 Caocao's Bridges

    Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...