Android 百度地图sdk 标注图marker中可以切换显示不同内容
来源:互联网 发布:mac团灭 编辑:程序博客网 时间:2024/06/06 16:52
记录一个前段时间解决的功能需求
先直接上图片看看实现后的效果:
具体需求为,在地图页上显示出所有的场站marker之后,点击左侧的按钮可以实现动态切换场站marker中显示的数据。
实现思路为:构造marker时,icon方法中传入的参数BitmapDescriptor设置为一个自定义的view,而不是一张简单图片,在这个view中,将大头针图片设置为view背景,上面放一个textview,点击按钮的时候,改变textview上面的值就可以了。
(如果没明白继续往下看↓)
====================================
在实现这个需求之前,有必要先了解一下覆盖物(Overlay)的构造方式
1、在百度地图中添加覆盖物,需要传入的参数是覆盖物的设置,返回值为Overlay
Overlay com.baidu.mapapi.map.BaiduMap.addOverlay(OverlayOptions arg0)
2、那么接下来关键就落在了OverlayOptions这个重要的类上面,通过查看api发现,在实现具体功能的时候我们需要用到的是他的一系列子类
ArcOptions, CircleOptions, DotOptions, GroundOverlayOptions, MarkerOptions, PolygonOptions, PolylineOptions, TextOptions
这些子类各有各的特点,这里只说MarkerOptions,我叫他标注物的设置
而观察MarkerOptions这个类的方法会发现,大部分方法的返回值都是MarkerOptions,也就是说创建他的时候可以一路“点”出来
各种各样的属性设置很多,本文就不多说,API上介绍的都很清楚
一般的创建方式是这样的:
MarkerOptions ooA = null;...ooA=newMarkerOptions().position(llA).icon(free_view).zIndex(9).draggable(false).extraInfo(mBundle);
==============================================
接下来到重点了
要做出题目中的需求,上面创建ooA的过程中,最重要的方法就是.icon()这个方法了,这个方法顾名思义就是为marker设置显示出的图标、样式,括号中接收的参数是BitmapDescriptor
MarkerOptions.icon(BitmapDescriptor arg0)
也就是说这个icon的来源是一个BitmapDescriptor
查找之后发现BitmapDescriptor的构成方式有以下几种
static BitmapDescriptor fromAsset(java.lang.String assetName)根据资源名称创建bitmap描述信息static BitmapDescriptor fromAssetWithDpi(java.lang.String assetName)根据资源名称和dpi创建bitmap描述信息,根据不同设备的dpi,对asset下图片等比例缩放static BitmapDescriptor fromBitmap(Bitmap image)根据 Bitmap 创建描述信息static BitmapDescriptor fromFile(java.lang.String fileName)根据应用程序私有文件夹里包含文件的文件名创建 bitmap 描述信息static BitmapDescriptor fromPath(java.lang.String absolutePath)根据文件绝对路径创建 bitmap 描述信息static BitmapDescriptor fromResource(int resourceId)根据资源 Id 创建 bitmap 描述信息static BitmapDescriptor fromView(View view)根据一个 View 创建 Bitmap 描述信息, 当 view 为 null 时返回 null
观察之后,很显然最后一个fromView(View view)是我们需要的
然后画一个我们需要的布局出来:
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/icon" > <TextView android:id="@+id/tv_num_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="¥99" android:textSize="9sp" /> </LinearLayout>
接下来就是在代码里添加了:
1、首先通过上面的布局做一个view出来,并且找到那个textview,然后给textview 赋值
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.pop_main_marker, null);TextView tv_num_price=(TextView) view.findViewById(R.id.tv_num_price);tv_num_price.setText("标注物上面你想显示的信息");
2、做出BitmapDescriptor
BitmapDescriptor free_view = BitmapDescriptorFactory.fromView(view);
3、创建MarkerOptions
MarkerOptions ooA = null;...ooA=newMarkerOptions().position(llA).icon(free_view).zIndex(9).draggable(false).extraInfo(mBundle);
4、在百度地图中显示出标注物
mBaiduMap.addOverlay(ooA)
5、到这里主要部分就基本完成了,下面就是设置一个按钮,点击的时候传不同的显示信息过去给marker显示,这部分这里就不再赘述了
我这里的切换按钮用的是checkbox控件显示的,关于checkbox更换背景相关的问题,请参照我的另一篇博客:
http://blog.csdn.net/qingchen1016/article/details/51199459
如有问题,请留言交流。
- Android 百度地图sdk 标注图marker中可以切换显示不同内容
- 百度地图 Android SDK - 标注(Marker)的基本使用
- 百度地图 Android SDK - 标注(Marker)的基本使用
- 百度地图 标注 显示信息 Marker单击事件 代码参考
- Android 百度地图marker中图片不显示的解决方案
- 百度地图-marker 标 内容
- 百度地图Marker隐藏/显示
- 百度地图API-地图标注(Marker)用法说明
- 百度地图 Android定位SDK--【显示地图 】
- Android Studio 百度地图定位、轨迹及所在位置与标注marker的距离
- 百度地图api根据地图缩放等级显示不同的marker点
- 安卓开发使用百度地图sdk实现定位,添加marker,城市切换等功能
- 百度Android地图SDK地理编码及标注
- 百度地图3.0以上版本标注marker及其点击事件
- 百度地图marker标注上如何加上数字
- 百度地图SDK for android marker不随地图的移动而移动(仿滴滴打车)
- Android百度地图(二):百度地图sdk显示位置点、图层绘制
- Android百度地图(二):百度地图sdk显示位置点、图层绘制
- iOS当UITableViewCell被选中或者高亮的时候,它的所有子view的颜色都会改变
- 模板的使用技巧
- 我的Java后端书架 (2016年暮春3.0版)
- iOS多线程开发——GCD的使用与多线程开发浅析
- 控制器的模块和操作
- Android 百度地图sdk 标注图marker中可以切换显示不同内容
- URL
- 分组、页面跳转与ajax
- 九、Go语言库之strconv包--GO语言笔记
- 项目技巧
- atoi()函数自实现
- 中序线索二叉树(Java)
- 上传 mp3,mp4文件
- 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 类似于图中效果