// 在使用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);

抽取HelloBaiduMapActivity.java的这一段代码到BaseActivity.java.

    // 常量要放在最前面.
/** 黑马坐标(北京市海淀区东北旺南路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 MapView mMapView;
private BaiduMap baiduMap;

这一段也是,变量名也一起拿过来.

这几个生命周期方法肯定也是需要要抽取的,如果说你写了其他界面用了百度地图肯定也要调这几个生命周期方法.所以把这几个生命周期方法也放到父类来.只要继承父类子类就不用写这些代码了.

    @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();
}

6.获取地图Ui控制器:隐藏指南针   第六步写到base里面去

        // 6.获取地图Ui控制器:隐藏指南针   第六步写到base里面去
//UiSettings uiSettings = baiduMap.getUiSettings();
//uiSettings.setCompassEnabled(false); // 不显示指南针

API怎么去调用的不需要记住,但是java的一些思想还是需要记住的.例如这里的java基础的技巧:这里加final是为了不让子类覆盖,原因是为了预防这里的一些类还没初始化的时候就被子类调用.

package com.itheima.baidumap74;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.UiSettings;
import com.baidu.mapapi.model.LatLng; import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.widget.Toast; public abstract class BaseActivity extends Activity{ // 常量要放在最前面.
private static final String TAG = "BaseActivity";//TAG一般以它类名.
/** 黑马坐标(北京市海淀区东北旺南路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 MapView mMapView;//
protected MapView mMapView;//改一下修饰符,让子类HelloBaiduMapActivity.java可以访问.
//private BaiduMap baiduMap;
protected BaiduMap baiduMap;//改一下修饰符,让子类HelloBaiduMapActivity.java可以访问. // 这里加final是为了不让子类覆盖,原因是为了预防这里的一些类还没初始化的时候就被子类调用.
@Override
//protected void onCreate(Bundle savedInstanceState) {
protected final void onCreate(Bundle savedInstanceState) {//加final,不让子类HelloBaiduMapActivity.java覆盖onCreate方法.
// TODO Auto-generated method stub
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控制器:隐藏指南针 第六步写到base里面去
//UiSettings uiSettings = baiduMap.getUiSettings();
//uiSettings.setCompassEnabled(false); // 不显示指南针 init();
}
/** 这个方法让子类实现 */
public abstract void init(); /**
* 在屏幕中央显示一个Toast
* @param text
*/
public void showToast(CharSequence text){//字符序列.字符序列这个接口
//CharSequence其实是我们String的父类.String是实现了这个接口的.
//所以说我们最好面向接口来编程.这样子这个方法更加通用.
Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT);//局部变量toast
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
@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();
} }
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 {
//初始化方法一般放到最前面来.
@Override
public void init() {
// TODO Auto-generated method stub
registerSDKCheckReceiver();
baiduMap.addHeatMap(null);
}
// 常量要放在最前面.
private static final String TAG = "HelloBaiduMapActivity";// 这个常量我们一般用它的类名就行了.
/** 黑马坐标(北京市海淀区东北旺南路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 MapView mMapView;
private BroadcastReceiver receiver;// 把receiver由局部/本地变量变成成员变量
//private BaiduMap baiduMap; /*@Override
protected void onCreate(Bundle savedInstanceState) {//父类BaseActivity.java不给覆盖onCreate()那HelloBaiduMapActivity的初始化代码写哪里去呢?
baiduMap.addHeatMap(null);//baiduMap这时候还没有初始化,所以会出现空指针异常.为了预防baiduMap在初始化之前调用,
super.onCreate(savedInstanceState);//baiduMap是在父类的onCreate方法里面初始化的.
registerSDKCheckReceiver();
/*
* // 在使用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();
}
*/ }

04、抽取BaseActivity的更多相关文章

  1. 2.抽取代码(BaseActivity)

    知识点 俩种退出程序的方法 复制集合 同步的用法 字符数组 工厂模式,生产fatgment,解决了碎片重复创建的问题 全局上下文 actionbar用法 fargmentadapter,当viewpa ...

  2. BaseActivity的抽取

    Activity有些公共部分,比如setContentView.Activity管理.初始化操作.联网操作.Activity跳转.关闭当前Activity.保存用户登录信息.读取用户登录信息等. 我们 ...

  3. 新闻网页通用抽取器GNEv0.04版更新,支持提取正文图片与源代码

    GeneralNewsExtractor以下简称GNE是一个新闻网页通用抽取器,能够在不指定任何抽取规则的情况下,把新闻网站的正文提取出来. 我们来看一下它的基本使用方法. 安装 GNE 使用 pip ...

  4. Moses在Ubuntu14.04平台的安装过程

    平台环境:在windows 7中建立VMware虚拟机,操作系统为Ubuntu_14.04_amd_64 1.安装GIZA++ 安装步骤如下: wget http://giza-pp.googleco ...

  5. c# 中模拟一个模式匹配及匹配值抽取

    摘一段模式的说明, F#的: msdn是这么描述它的:“模式”是用于转换输入数据的规则.模式将在整个 F# 语言中使用,采用多种方式将数据与一个或多个逻辑结构进行比较.将数据分解为各个构成部分,或从数 ...

  6. 布局共享(列如所有activity拥有相同的布局部分,比如actionbar,在BaseActivity中写入布局)

    有时候界面上会用到统一的布局,比如toolbar,你可能会想到在用到的地方都去加上toobar这样对于程序的开发与维护来说都显得特别麻烦,我们可以将他写在父类中. 首先创建一个BaseActivity ...

  7. ubuntu12.04下同步cm10源码(个人记录,当作笔记)

    环境:AMD N850,4G,ubuntu12.04 x64, 老规矩,先是各种依赖: sudo apt-get install git-core gnupg flex bison python ra ...

  8. [开源]开放域实体抽取泛用工具 NetCore2.1

    开放域实体抽取泛用工具 https://github.com/magicdict/FDDC 更新时间 2018年7月16日 By 带着兔子去旅行 开发这个工具的起源是天池大数据竞赛,FDDC2018金 ...

  9. C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】

    C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...

随机推荐

  1. CF450B Jzzhu and Sequences(矩阵加速)

    CF450B Jzzhu and Sequences 大佬留言:这.这.不就是矩乘的模板吗,切掉它!! You are given xx and yy , please calculate $f_{n ...

  2. Linux命令rsync使用总结

    详细用法见:https://www.cnblogs.com/oboth-zl/articles/10334754.html rsync命令简介 主要用于数据同步.备份和镜像,除了本地使用之外,也可以通 ...

  3. Platform 获取主机系统信息

    该模块用来访问平台相关属性. 常见属性和方法 1. import platform(pip install platform)   2.获取操作系统名称及版本号 def get_platform(): ...

  4. axios在实际项目中的使用介绍

    1.axios本身就封装了各种数据请求的方法 执行 GET 请求 // 为给定 ID 的 user 创建请求 axios.get('/user?ID=12345') .then(function (r ...

  5. vue-router2.0二级路由的简单使用

    1.app.vue中 <template> <div id="app"> <router-view></router-view> & ...

  6. 【08】AngularJS XMLHttpRequest

    AngularJS XMLHttpRequest $http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据. 读取 JSON 文件 以下是存储在web服务器上的 JSON 文件: ...

  7. [置顶] Linux学习总结(20)——Linux 文件夹结构和作用

     /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/home/us ...

  8. noip模拟赛 蒜头君打地鼠

    分析:直接一个一个地去暴力枚举分数比较少,我们需要一种比较快的统计一定空间内1的数量,标准做法是前缀和,但是二维前缀和维护的是一个矩形内的值,这个是旋转过的该怎么办?可以把图旋转45°,不过这样比较考 ...

  9. HBase的集群搭建

    前提:已经安装过jdk,HDFS集群和zookeeper,我的集群规划见HDFS的文章中 1.在1上安装配置hbase 下载:http://mirror.bit.edu.cn/apache/hbase ...

  10. php处理管道文件流

    <?php #!/usr/local/bin/php -q function read(){ $fp = fopen("php://stdin", "r" ...