Android 百度地图添加自定义marker(覆盖物)不显示图片的解决方法
2016-11-14 17:12
1281 查看
在使用百度地图添加自定义Marker View时,显示不出来自定义marker view里面的头像,百度地图的添加自定义marker显示网络图片本身就是一个坑(我是这样认为的)...
我的需求是这样的,当有人员上报位置时,就根据经纬度把人员位置信息用自定义Marker去加载请求头像的方式显示出来,添加一个或多个的网络头像时图片显示不出来,如果使用InfoWindow去加载能显示出来,但是InfoWindow只能加载一条View,这就很蛋疼了,下面这些问题是我很尝试直接, 有绕过,跳过,踩的一些坑....
尝试方法一:使用Glide去加载图片无论是同步还是异步都加载不了(连本地默认图片也无法加载)
尝试方法二:获取图片地址后,单独网络请求后加载图片到地图上,也失败
尝试方法三:获取视图布局后转换成Bitmap去加载,只能加载本地图片,异步加载网络图片也失败
尝试方法四:通过先加载布局到地图上,然后强转为Marker后重新加载图片,也失败
尝试方法五:通过分离控件出来先加载地图,然后再去设置图片也失败
尝试方法六:通过Infowindow去加载,能加载网络图片,但是只能添加一个覆盖物....
百度地图加载自定义Marker View的方式(显示不出来网络图片):
BitmapDescriptor bitmapDescriptor=BitmapDescriptorFactory.fromView(View);
MarkerOptions marker=newMarkerOptions()
.icon(bitmapDescriptor)
.position(latLng);
baiduMap.addOverlay(marker);
使用InfoWindow方式加载地图,能显示出来网络图片(只能添加一条View):
InfoWindow infoWindow=new InfoWindwo(View,LatLng,0);
baiduMap.showInfoWindow(infoWindow);
解决方案:
首先,要感谢这夲仒無道提供个方法把View转换成Bitmap,通过这个方法后能加载本地图片:前提是要在这个方法之前找到设置图片的控件先设置本地图片...
详情看他的博客:https://my.oschina.net/freestyletime/blog/291638
/**
*把View转换成Bitmap类型
*@paramaddViewContent要转换的View
*@return
*/
public staticBitmap getViewBitmap(View addViewContent) {
addViewContent.setDrawingCacheEnabled(true);
addViewContent.measure(
View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED));
addViewContent.layout(0,0,
addViewContent.getMeasuredWidth(),
addViewContent.getMeasuredHeight());
addViewContent.buildDrawingCache();
Bitmap cacheBitmap = addViewContent.getDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);
returnbitmap;
}
最后的解决方案是这样的:异步加载完成头像后,转换View成Bitmap,再通过fromBitmap添加到地图上(这里要注意的是子主线程的问题)
//获取头像布局View
View personLocView = ViewUtils.getPersonLoView(mContext,
account);
//通过View去找到ImageView控件,这是我自定义圆形头像ImageView
CircleImageView headAvatar = (CircleImageView)
personLocView.findViewById(R.id.iv_avatar);
/**
*异步加载头像到地图上,原理是把设置好图片,把View转换成Bitmap后再添加到地图,这样地图才能
显示出头像来
*/
CiatWildHelper.getInstance().getUserProfileManager().asyncGetUserInfo(account,
new
EMValueCallBack<EaseUser>() {
@Override
public voidonSuccess(EaseUser user) {
if(user!=null){
if(!TextUtils.isEmpty(user.getAvatar())){//用户头像地址不为空,设置完头像
//把请求到的图片设置到ImageView上,这里设置Glide去加载,这个开源库使用很方便
Glide.with(mContext).load(user.getAvatar())
.placeholder(R.mipmap.em_default_avatar).into(headAvatar);
//设置成功后把View转换成Bitmap
Bitmap viewBitmap = ViewUtils.getViewBitmap(personLocView);
//调用百度地图提供的api获取刚转换的Bitmap
BitmapDescriptor bitmapDescriptor=BitmapDescriptorFactory.fromBitmap(viewBitmap);
//构建Marker对象和指定经纬度
MarkerOptions marker=newMarkerOptions()
.icon(bitmapDescriptor)
.position(latLng);
//添加到地图上
baiduMap.addOverlay(marker);
}
}
}
@Override
public voidonError(interror,
String errorMsg) {
Log.e("asyncFetchUserInfo","地图加载头像失败");
}
});
我的需求是这样的,当有人员上报位置时,就根据经纬度把人员位置信息用自定义Marker去加载请求头像的方式显示出来,添加一个或多个的网络头像时图片显示不出来,如果使用InfoWindow去加载能显示出来,但是InfoWindow只能加载一条View,这就很蛋疼了,下面这些问题是我很尝试直接, 有绕过,跳过,踩的一些坑....
尝试方法一:使用Glide去加载图片无论是同步还是异步都加载不了(连本地默认图片也无法加载)
尝试方法二:获取图片地址后,单独网络请求后加载图片到地图上,也失败
尝试方法三:获取视图布局后转换成Bitmap去加载,只能加载本地图片,异步加载网络图片也失败
尝试方法四:通过先加载布局到地图上,然后强转为Marker后重新加载图片,也失败
尝试方法五:通过分离控件出来先加载地图,然后再去设置图片也失败
尝试方法六:通过Infowindow去加载,能加载网络图片,但是只能添加一个覆盖物....
百度地图加载自定义Marker View的方式(显示不出来网络图片):
BitmapDescriptor bitmapDescriptor=BitmapDescriptorFactory.fromView(View);
MarkerOptions marker=newMarkerOptions()
.icon(bitmapDescriptor)
.position(latLng);
baiduMap.addOverlay(marker);
使用InfoWindow方式加载地图,能显示出来网络图片(只能添加一条View):
InfoWindow infoWindow=new InfoWindwo(View,LatLng,0);
baiduMap.showInfoWindow(infoWindow);
解决方案:
首先,要感谢这夲仒無道提供个方法把View转换成Bitmap,通过这个方法后能加载本地图片:前提是要在这个方法之前找到设置图片的控件先设置本地图片...
详情看他的博客:https://my.oschina.net/freestyletime/blog/291638
/**
*把View转换成Bitmap类型
*@paramaddViewContent要转换的View
*@return
*/
public staticBitmap getViewBitmap(View addViewContent) {
addViewContent.setDrawingCacheEnabled(true);
addViewContent.measure(
View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED));
addViewContent.layout(0,0,
addViewContent.getMeasuredWidth(),
addViewContent.getMeasuredHeight());
addViewContent.buildDrawingCache();
Bitmap cacheBitmap = addViewContent.getDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);
returnbitmap;
}
最后的解决方案是这样的:异步加载完成头像后,转换View成Bitmap,再通过fromBitmap添加到地图上(这里要注意的是子主线程的问题)
//获取头像布局View
View personLocView = ViewUtils.getPersonLoView(mContext,
account);
//通过View去找到ImageView控件,这是我自定义圆形头像ImageView
CircleImageView headAvatar = (CircleImageView)
personLocView.findViewById(R.id.iv_avatar);
/**
*异步加载头像到地图上,原理是把设置好图片,把View转换成Bitmap后再添加到地图,这样地图才能
显示出头像来
*/
CiatWildHelper.getInstance().getUserProfileManager().asyncGetUserInfo(account,
new
EMValueCallBack<EaseUser>() {
@Override
public voidonSuccess(EaseUser user) {
if(user!=null){
if(!TextUtils.isEmpty(user.getAvatar())){//用户头像地址不为空,设置完头像
//把请求到的图片设置到ImageView上,这里设置Glide去加载,这个开源库使用很方便
Glide.with(mContext).load(user.getAvatar())
.placeholder(R.mipmap.em_default_avatar).into(headAvatar);
//设置成功后把View转换成Bitmap
Bitmap viewBitmap = ViewUtils.getViewBitmap(personLocView);
//调用百度地图提供的api获取刚转换的Bitmap
BitmapDescriptor bitmapDescriptor=BitmapDescriptorFactory.fromBitmap(viewBitmap);
//构建Marker对象和指定经纬度
MarkerOptions marker=newMarkerOptions()
.icon(bitmapDescriptor)
.position(latLng);
//添加到地图上
baiduMap.addOverlay(marker);
}
}
}
@Override
public voidonError(interror,
String errorMsg) {
Log.e("asyncFetchUserInfo","地图加载头像失败");
}
});
相关文章推荐
- 关于百度地图(三)添加覆盖物自定义布局及遇到的一些bug解决方法
- android ListView常见问题解决方法(滚动背景变黑,去除滑动时阴影,拖动时Item图片不显示)
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- onethink后台添加自定义菜单不显示的解决方法
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- 关于使用NotificationComat导致android2.3及以下版本无法显示自定义布局的解决方法.
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- 关于图片资源在android2.1/2.2/2.3下无法显示的问题以及解决方法
- android FileReader 读取图片资源显示预览失败解决方法
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- 在android百度地图上添加自定义覆盖物
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
- android ViewPager在拖拽到左边和右边的时候,禁止显示黄色或者蓝色的渐变图片的解决方法
- android百度地图 添加覆盖物Marker与InfoWindow的使用
- Android百度地图添加多个自定义的覆盖物-日记