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 ... 
随机推荐
- svn无法显示日期和作者
			当遇到这种情况,只要把这个read改为none就可以显示了 亲测绝对管用 
- .Net Core2.2 + EF Core + DI,三层框架项目搭建教程
			笔记: 近两年.Net Core发展的很快,目前最新版为3.0预览版,之前在网上买了一本1.1版书籍都还没来得及看呢,估计现在拿出来看也毫无意义了.已多年.net工作经验,看书不如直接实际上手来得快, ... 
- 如何在MONO 3D寻找最短路路径
			前段时间有个客户说他们想在我们的3D的机房中找从A点到B点的最短路径,然而在2D中确实有很多成熟的寻路算法,其中A*是最为常见的,而这个Demo也是用的A*算法,以下计算的是从左上角到右下角的最短路径 ... 
- 参考KOA,5步手写一款粗糙的web框架
			我经常在网上看到类似于KOA VS express的文章,大家都在讨论哪一个好,哪一个更好.作为小白,我真心看不出他两who更胜一筹.我只知道,我只会跟着官方文档的start做一个DEMO,然后我就会 ... 
- HDU - 2050 - 折线分割平面(数学 + dp)
			题意: 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分 思路: 记住结论.. ... 
- LINUX-磁盘空间
			df -h 显示已经挂载的分区列表 ls -lSr |more 以尺寸大小排列文件和目录 du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间' du -sk * | sort -rn ... 
- 实验1“C语言开发环境使用和数据类型、运算符、表达式”总结与体会
			一.实验结论 1.判断奇偶 // 程序功能: // 要求用户从键盘输入一个整数,判断其是奇数还是偶数 #include <stdio.h> int main() { int x; prin ... 
- Codeforces Round #234 (Div. 2)
			A. Inna and Choose Options time limit per test 1 second memory limit per test 256 megabytes input st ... 
- 又见GCD
			Problem Description 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c. Input ... 
- The Evaluation of Determinant(求行列式mod一个数的值)
			#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #i ... 
