04、抽取BaseActivity
// 在使用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的更多相关文章
- 2.抽取代码(BaseActivity)
知识点 俩种退出程序的方法 复制集合 同步的用法 字符数组 工厂模式,生产fatgment,解决了碎片重复创建的问题 全局上下文 actionbar用法 fargmentadapter,当viewpa ...
- BaseActivity的抽取
Activity有些公共部分,比如setContentView.Activity管理.初始化操作.联网操作.Activity跳转.关闭当前Activity.保存用户登录信息.读取用户登录信息等. 我们 ...
- 新闻网页通用抽取器GNEv0.04版更新,支持提取正文图片与源代码
GeneralNewsExtractor以下简称GNE是一个新闻网页通用抽取器,能够在不指定任何抽取规则的情况下,把新闻网站的正文提取出来. 我们来看一下它的基本使用方法. 安装 GNE 使用 pip ...
- Moses在Ubuntu14.04平台的安装过程
平台环境:在windows 7中建立VMware虚拟机,操作系统为Ubuntu_14.04_amd_64 1.安装GIZA++ 安装步骤如下: wget http://giza-pp.googleco ...
- c# 中模拟一个模式匹配及匹配值抽取
摘一段模式的说明, F#的: msdn是这么描述它的:“模式”是用于转换输入数据的规则.模式将在整个 F# 语言中使用,采用多种方式将数据与一个或多个逻辑结构进行比较.将数据分解为各个构成部分,或从数 ...
- 布局共享(列如所有activity拥有相同的布局部分,比如actionbar,在BaseActivity中写入布局)
有时候界面上会用到统一的布局,比如toolbar,你可能会想到在用到的地方都去加上toobar这样对于程序的开发与维护来说都显得特别麻烦,我们可以将他写在父类中. 首先创建一个BaseActivity ...
- ubuntu12.04下同步cm10源码(个人记录,当作笔记)
环境:AMD N850,4G,ubuntu12.04 x64, 老规矩,先是各种依赖: sudo apt-get install git-core gnupg flex bison python ra ...
- [开源]开放域实体抽取泛用工具 NetCore2.1
开放域实体抽取泛用工具 https://github.com/magicdict/FDDC 更新时间 2018年7月16日 By 带着兔子去旅行 开发这个工具的起源是天池大数据竞赛,FDDC2018金 ...
- 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/ ...
随机推荐
- DH密钥交换算法
DH密钥交换算法:DH的全称为Diffie-Hellman ,该算法可以在需要安全传输的前提下,确定双方的对称密钥,该算法的核心在于双方的私钥没有进入网络传输流程,根据对方的公钥和己方的私钥,可以计算 ...
- 个人Linux(ubuntu)使用记录——更换软件源
说明:记录自己的linux使用过程,并不打算把它当作一个教程,仅仅只是记录下自己使用过程中的一些命令,配置等东西,这样方便自己查阅,也就不用到处去网上搜索了,所以文章毫无章法可言,甚至会记录得很乱 s ...
- 洛谷——P2420 让我们异或吧
P2420 让我们异或吧 题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中…xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B ...
- 51nod 1050 循环数组最大子段和【动态规划】
N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a[n] ...
- NFS文件服务
安装NFS服务 Yum install nfs-utils –y 2.关闭防火墙 service iptables stop 3./etc/exports NFS服务配置文件 /home/share ...
- Python函数: any()和all()的用法
版权声明:本文为博主原创文章,未经允许不得转载 引子 平常的文本处理工作中,我经常会遇到这么一种情况:用python判断一个string是否包含一个list里的元素. 这时候使用python的内置函数 ...
- web视频播放插件:Video For Everybody
相比其它的web视频播放插件(video.js , jwplayer等)来说,Video For Everybody(极力推荐)是一款更好的视频播放插件,无需任何下载,支持html5以及flash播放 ...
- saltstack(二) master、minion常用配置选项
master常用配置选项: interface: 指定bind的地址(默认0.) publish_port:指定发布端口(默认4505) ret_port: 指定结果返回端口,与minion配置文件的 ...
- TestNG常用注解
原文链接:https://www.yiibai.com/testng/basic-annotations.html 以下是TestNG支持的注释列表: 注解 描述 @BeforeSuite 在该 ...
- 关于markdown(typora)的操作指南,以及导出为word格式文件插件(pandoc-2.6-windows-x86_64)的下载
Markdown简介 插件链接文章结尾处 目录 Markdown简介1. Markdown是什么?2. 谁创造了它?3. 为什么要使用它?4. 怎么使用?4.1 标题4.2 段落4.3 区块引用4.4 ...