做地图社交类APP开发的都知道,一般情况下,为了整体的美观和用户体验度,我们需要定制化Marker的样式。本文中实现的方式都是基于高德地图的,百度地图也类似,大家可以照葫芦画瓢,废话不多说,先来看看最终效果:
- 实现思路:
先来看看高德官方提供的设置Marker图标的方法:
我们可以看到setIcon()方法,里面的参数BitmapDescriptor就是我们最终需要的东西。那么到底该如何得到这个BitmapDescriptor对象呢,其实很简单,该对象可以通过BitmapDescriptorFactory工厂类获取,BitmapDescriptorFactory提供了以下方法来得到BitmapDescriptor对象:
/**
* 1.通过资源id获取
*/
public static BitmapDescriptor fromResource(int var0) {
......
}
/**
* 2.通过自定义的view获取
*/
public static BitmapDescriptor fromView(View var0) {
......
}
/**
* 3.通过具体路径资源获取
*/
public static BitmapDescriptor fromPath(String var0) {
......
}
/**
* 4.通过具体Assets资源获取
*/
public static BitmapDescriptor fromAsset(String var0) {
......
}
/**
* 5.通过具体文件获取
*/
public static BitmapDescriptor fromFile(String var0) {
......
}
/**
* 6.通过bitmap获取
*/
public static BitmapDescriptor fromBitmap(Bitmap var0) {
......
}
从以上官方提供的方法可以看到,得到BitmapDescriptor对象的方式有多种,我们可以根据自己需要自行选择。但是,为了应对频繁的需求变化,我们肯定要选择更为动态,灵活的方式来应付我们的需求变化,我们就可以选择fromView()和fromBitmap()两种方式来得到BitmapDescriptor对象了。这里选用fromBitmap()方式来得到BitmapDescriptor对象吧,因为采用fromView()方法获取后有个巨坑,这个后面再说。
如果我们要根据需求自定义Marker,当然是希望能够让它可大可小,可动可静了,那就非view莫属了。只要我们可以自定义view布局,然后转化成bitmap不就OK了吗,好,说干就干,我们以自定义Makrer样式并加载网络图片为例,开干!
- 定制化Marker布局,加载网络图片: