Android学习笔记之百度地图(分条目覆盖物:ItemizedOverlay)

本文主要是介绍Android学习笔记之百度地图(分条目覆盖物:ItemizedOverlay),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



看看多了那三个小图片就是我们的效果结果。点击一下也会有相应的。试一下吧!

某个类型的覆盖物,包含多个类型相同、显示方式相同、处理方式相同的项时,使用此类:

  • 自定义类继承ItemizedOverlay<OverlayItem>,并Override其draw()方法,如果需要点击、按键、触摸等交互操作,还需Override onTap()等方法。

主要用到类 OverlayItem,百度地图上的API

ItemizedOverlay是Overlay的一个基类,包含了一个OverlayItem列表。 从南到北的处理item,用于绘制、创建平移边界、为每个点绘制标记点,和维护一个焦点选中的item,同时也负责把一个屏幕点击匹配到item上去,分发焦点改变事件给备选的监听器。

类型名称
static intITEM_STATE_FOCUSED_MASK
bitset位: 标识该overlay item处于焦点选中状态
static intITEM_STATE_NORMAL_MASK
bitset位:表明该overlay item处于正常状态
static intITEM_STATE_PRESSED_MASK
bitset位:表明该overlay item正处于被按下状态
static intITEM_STATE_SELECTED_MASK
bitset位:表明该overlay item正处于被选中状态
protected DrawablemMarker
用于表示该item的overlay标记点
protected GeoPointmPoint
该item的位置
protected java.lang.StringmSnippet
该item的文字片段
protected java.lang.StringmTitle
该item的标题文本


返回类型方法
DrawablegetMarker(int stateBitset)
返回标记点,该标记点在地图上绘制该item时使用。
GeoPointgetPoint()
返回该overlay的经纬度,以GeoPoint形式
java.lang.StringgetSnippet()
返回该overlay的文本片段
java.lang.StringgetTitle()
返回该overlay的标题文本
java.lang.StringroutableAddress()
暂未实现
voidsetMarker(Drawable marker)
设置标记点,该标记点在地图上绘制该item时使用。
static voidsetState(Drawable drawable, int stateBitset)
设置一个drawable的状态以匹配给定的静态betset位。



具体实现:

package xiaosi.baiduMap;import java.util.ArrayList;
import java.util.List;import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.Toast;import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.ItemizedOverlay;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.OverlayItem;public class BaiduMapActivity extends MapActivity
{/** Called when the activity is first created. */private BMapManager mapManager = null;private String key = "1B79478DA01F7800AEA8602517A6D89B38151105";private MapView mapView = null;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);mapManager = new BMapManager(getApplication());mapManager.init(key, null);super.initMapActivity(mapManager);mapView = (MapView) findViewById(R.id.mapsView);mapView.setBuiltInZoomControls(true); // 设置启用内置的缩放控件MapController mapController = mapView.getController(); // 得到mMapView的控制权,可以用它控制和驱动平移和缩放mapController.setZoom(12); // 设置地图zoom级别Drawable marker = getResources().getDrawable(R.drawable.d);  //得到需要标在地图上的资源mapView.getOverlays().add(new OverItemT(marker, this)); //添加ItemizedOverlay实例到mMapView}class OverItemT extends ItemizedOverlay<OverlayItem>{private List<OverlayItem> GeoPointList = new ArrayList<OverlayItem>();private Context mContext;//三个坐标private double coordinateX1=  39.90923;private double coordinateY1 = 116.397428;private double coordinateX2 = 39.9022;private double coordinateY2 = 116.3922;private double coordinateX3 = 39.917723;private double coordinateY3 = 116.3722;private double coordinateX4 = 39.90923;private double coordinateY4 = 116.3922;public OverItemT(Drawable marker, Context context){//调整一个drawable边界,使得(0,0)是这个drawable底部最后一行中心的一个像素。super(boundCenterBottom(marker));this.mContext = context;// 用给定的经纬度构造GeoPoint,单位是微度 (度 * 1E6)GeoPoint point1 = new GeoPoint((int) (coordinateX1 * 1E6), (int) (coordinateY1 * 1E6));GeoPoint point2 = new GeoPoint((int) (coordinateX2 * 1E6), (int) (coordinateY2 * 1E6));GeoPoint point3 = new GeoPoint((int) (coordinateX3 * 1E6), (int) (coordinateY3 * 1E6));GeoPoint point4 = new GeoPoint((int) (coordinateX4 * 1E6), (int) (coordinateY4 * 1E6));/*OverlayItem(GeoPoint point, String title, String snippet)* point     该item的位置* title     该item的标题文本* snippet   该item的文字片段*/GeoPointList.add(new OverlayItem(point1, "P1", "写字楼"));GeoPointList.add(new OverlayItem(point2, "P2", "西城区政府"));GeoPointList.add(new OverlayItem(point3, "P3", "招待所"));GeoPointList.add(new OverlayItem(point4, "P4", "小学"));// createItem(int)方法构造item。一旦有了数据,在调用其它方法前,首先调用这个方法populate(); }@Overrideprotected OverlayItem createItem(int i){return GeoPointList.get(i);}@Overridepublic int size(){System.out.println("Size;" + GeoPointList.size());return GeoPointList.size();}@Override// 处理当点击事件protected boolean onTap(int i){//getSnippet() 该item的文字片段Toast.makeText(this.mContext, GeoPointList.get(i).getSnippet(),Toast.LENGTH_SHORT).show();return true;}}@Overrideprotected boolean isRouteDisplayed(){return false;}@Overrideprotected void onDestroy(){if (mapManager != null){mapManager.destroy();mapManager = null;}super.onDestroy();}@Overrideprotected void onPause(){if (mapManager != null){mapManager.stop();}super.onPause();}@Overrideprotected void onResume(){if (mapManager != null){mapManager.start();}super.onResume();}
}






源代码下载: 点击打开链接



这篇关于Android学习笔记之百度地图(分条目覆盖物:ItemizedOverlay)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/567835

相关文章

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]