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

如有问题,请留言交流。

3 0
原创粉丝点击