安卓百度地图 安卓InfoWindow重影怎么办

Blog / 阅读
解决百度地图多个Marker和InfoWindow时总是打开最后一个InfoWindow的问题
10:58:52 in ,
&在做项目的过程中,发现了在使用百度地图的过程中,加入多个Marker和多个InfoWindow的时候,多个Marker可以在地图上不同的坐标点显示出来,但是当点击不同的Marker的时候,显示的总是最后一个Marker对应的InfoWindow。至少直接写For循环是这个样子的。
于是乎我看到之前的代码是对应着写:Marker1,InfoWindow1, Marker2,InfoWindow2, Marker3,InfoWindow3。我的个天呀,如果是100个呢?那得有多少的代码呀?
下面的代码是在原代码的基础上修改的,肯定还有很大提升的空间。
我们取到的数据,也就是下面data中的数据:
[javascript] view plaincopy
[{"Id":"2a20ee78-f201-a-a0d0b6bc5ba4","AppInfoId":0,"ParentId":"a2928e7e-a2af-4028-91aa-276e8b197f14","ParentName":"","CollectionTypeId":0,"Name":"落霞水榭码头","Introduce":"落霞水榭游船码头集观光、旅游等多种功能于一身、牡丹园等景点。","Longitude":"114.388207","Latitude":"30.578016","PixelX":"3390","PixelY":"1530","CollectionCount":0,"Rank":0,"IsEnable":1,"CreateUserId":"","CreateTime":"0:00:00","UpdateTime":"1:02:11","ImageUrls":[],"ScenicSpots":[],"VoiceIds":"/Resources/Voices/0001.mp3"},{"Id":"a3-41f6-99a5-f2ef90dbcbde","AppInfoId":0,"ParentId":"a2928e7e-a2af-4028-91aa-276e8b197f14","ParentName":"","CollectionTypeId":0,"Name":"汉街中心码头","Introduce":"汉街中心码头位于沙湖湖畔","Longitude":"114.340402","Latitude":"30.566693","PixelX":"340","PixelY":"740","CollectionCount":0,"Rank":0,"IsEnable":1,"CreateUserId":"","CreateTime":"6:48:01","UpdateTime":" 16:37:30","ImageUrls":[],"ScenicSpots":[],"VoiceIds":"/Resources/Voices/donghutest.mp3"},{"Id":"ecb5128d-be9b-49d0-a7dc-eb","AppInfoId":0,"ParentId":"a2928e7e-a2af-4028-91aa-276e8b197f14","ParentName":"","CollectionTypeId":0,"Name":"磨山梅园码头","Introduce":"磨山梅磨山梅园码头依山傍水,","Longitude":"114.410607","Latitude":"30.555938","PixelX":"2790","PixelY":"2800","CollectionCount":0,"Rank":0,"IsEnable":1,"CreateUserId":"","CreateTime":"8:48:01","UpdateTime":"7:40:15","ImageUrls":[],"ScenicSpots":[],"VoiceIds":""}] &
[javascript] view plaincopy
//获取子景点 &
& & & & var scenicS &
& & & & $(function () { &
& & & & & & getList(); &
& & & & }) &
& & & & function getList() { &
& & & & & & // 不同的应用所调用的API参数是不相同的,请修改 &
& & & & & & $.getJSON("/api", {}, &
& & & & & & & & function (data) { &
& & & & & & & & & & scenicSpots = &
& & & & & & & & & & var myIcon = new BMap.Icon("poi.png", new BMap.Size(23, 33), { & &// &
& & & & & & & & & & & & offset: new BMap.Size(0, 0), & &//相当于CSS精灵 &
& & & & & & & & & & & & imageOffset: new BMap.Size(0, 0) & &//图片的偏移量。为了是图片底部中心对准坐标点。 &
& & & & & & & & & & }); &
& & & & & & & & & & var myIconHover = new BMap.Icon("poi_hover.png", new BMap.Size(40, 50), { & &//小车图片 &
& & & & & & & & & & & & offset: new BMap.Size(-7, -7), & &//相当于CSS精灵 &
& & & & & & & & & & & & imageOffset: new BMap.Size(0, 0) & &//图片的偏移量。为了是图片底部中心对准坐标点。 &
& & & & & & & & & & }); &
& & & & & & & & & & &
& & & & & & & & & & &&
& & & & & & & & & & for (var i = 0; i & scenicSpots. i++) { & & & & & & &
& & & & & & & & & & & & var point = new BMap.Point(scenicSpots[i].Longitude, scenicSpots[i].Latitude); & & //POI点坐标 &
& & & & & & & & & & & & var marker = new BMap.Marker(point, { icon: myIcon }); &
& & & & & & & & & & & & var iw = createInfoWindow(i); & & & & & & & & & & &&
& & & & & & & & & & & & drawMap.addOverlay(marker); &
& & & & & & & & & & & & &&
& & & & & & & & & & & & (function () { &
& & & & & & & & & & & & & & var index = &
& & & & & & & & & & & & & & var _iw = createInfoWindow(i); &
& & & & & & & & & & & & & & var _marker = &
& & & & & & & & & & & & & & _marker.addEventListener("click", function () { &
& & & & & & & & & & & & & & & & this.openInfoWindow(_iw); &
& & & & & & & & & & & & & & & & &&
& & & & & & & & & & & & & & }); &
& & & & & & & & & & & & & & _iw.addEventListener("open", function () { & & & & & & & & & & & & & &&
& & & & & & & & & & & & & & & & _marker.setIcon(myIconHover); &
& & & & & & & & & & & & & & }) &
& & & & & & & & & & & & & & _iw.addEventListener("close", function () { &
& & & & & & & & & & & & & & & & _marker.setIcon(myIcon); &
& & & & & & & & & & & & & & }) &
& & & & & & & & & & & & })() &
& & & & & & & & & & } & & & & & & & & & & &
& & & & & & & & }) &
& & & & } &
& & & & //对应不同的Marker创建不同的InfoWindow &
& & & & function createInfoWindow(i) { &
& & & & & & var sContent = "&div class='mark_tip_top'&&p&" + scenicSpots[i].Introduce + "&/p&&/div&&div class='mark_tip_bottom' data-audio='" + scenicSpots[i].VoiceIds + "'&&a class='play' href='javascript:void(0);'&&span&&i&语音&/i&&/span&&/a&&a class='' href='/EastLakeBoat/BeautyPicture/BeautyPictureByScenicSpotId?id=" + scenicSpots[i].Id + "'&&span&&i&图片&/i&&/span&&/a&&a class='go_map' onclick='return gomap_oclick(0)'&&span&&i&去这&/i&&/span&&/a&&/div&"; &
& & & & & & var iw = Window("", { enableMessage: false }); &
& & & & & & iw.setTitle("&label style=\"font-size: 16font-weight:color: #CD533F;font-family: 'microsoft yahei';\"&" + scenicSpots[i].Name + "&/label&"); &
& & & & & & iw.setContent(sContent); &
& & & & & & &
& & & & } &
526互联致力于最新开发技术,为您的网站或软件提供最新最优质的的服务是我们应尽的责任。
电话: +86 (0) 137-后使用快捷导航没有帐号?
暂时没有人问过相似的问题,你可以做第一个提问题的人
查看: 4732|回复: 8
android地图,怎么添加自定义InfoWindow?
如题.我想在infowindow里面,显示图片和文字,请问要怎么实现呀?谢谢这样添加气泡 就直接崩溃了
LatLng pt = new LatLng(39.7428);
RelativeLayout bubble = new RelativeLayout(mContext);
& & & & & & & & bubble.setBackgroundResource(R.drawable.screenshot4);
& & & & & & & & //bubble.
& & & & & & & & //创建InfoWindow,传入view,地理坐标,y 轴偏移量
& & & & & & & & InfoWindow mInfoWindow = new InfoWindow(bubble, pt, -47);
& & & & & & & & //显示InfoWindow
& & & & & & & & mBaiduMap.showInfoWindow(mInfoWindow);复制代码
看api这样添加是没问题的.
LatLng pt = new LatLng(39.7428);
View bubble = new View(this);
bubble.setBackgroundResource(R.drawable.screenshot4);
//创建InfoWindow,传入view,地理坐标,y 轴偏移量
InfoWindow mInfoWindow = new InfoWindow(bubble, pt, -47);
//显示InfoWindow
mBaiduMap.showInfoWindow(mInfoWindow);复制代码
本帖最后由 cxy020 于
15:09 编辑
发现了问题.
非得用LinearLayout
用RelativeLayout 就崩溃.&&这到底是个什么机制呢......
就是自己建立一个view&&然后传给 infowindow&&就好了
& &谢谢. 但只创建一个view是可以的.& &但是,需求在这个气泡显示 文本 和 图片 等 元素, 所以 我想 我需要一个布局 才能实现
& &现在用api提供的方法,传入一个布局view 就会崩溃. 如果方便的话, 能贴点代码 帮助一下么,谢谢
12-25 10:55:35.793: E/AndroidRuntime(21118): java.lang.NullPointerException
12-25 10:55:35.793: E/AndroidRuntime(21118):&&at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:442)
12-25 10:55:35.793: E/AndroidRuntime(21118):&&at android.view.View.measure(View.java:12735)
12-25 10:55:35.793: E/AndroidRuntime(21118):&&at com.baidu.mapapi.map.BitmapDescriptorFactory.fromView(Unknown Source)
12-25 10:55:35.793: E/AndroidRuntime(21118):&&.mobnote.golukmobile.MainActivity.pointDataCallback(MainActivity.java:510)
12-25 10:55:35.793: E/AndroidRuntime(21118):&&.mobnote.golukmobile.MainActivity$1.handleMessage(MainActivity.java:275)
12-25 10:55:35.793: E/AndroidRuntime(21118):&&at android.os.Handler.dispatchMessage(Handler.java:99)
12-25 10:55:35.793: E/AndroidRuntime(21118):&&at android.os.Looper.loop(Looper.java:137)
12-25 10:55:35.793: E/AndroidRuntime(21118):&&at android.app.ActivityThread.main(ActivityThread.java:4424)
12-25 10:55:35.793: E/AndroidRuntime(21118):&&at java.lang.reflect.Method.invokeNative(Native Method)
12-25 10:55:35.793: E/AndroidRuntime(21118):&&at java.lang.reflect.Method.invoke(Method.java:511)
12-25 10:55:35.793: E/AndroidRuntime(21118):&&at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-25 10:55:35.793: E/AndroidRuntime(21118):&&at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-25 10:55:35.793: E/AndroidRuntime(21118):&&at dalvik.system.NativeStart.main(Native Method)
复制代码
&&.mobnote.
.mobnote.golukmobile.R;
import android.content.C
import android.text.TextU
import android.util.AttributeS
import android.view.LayoutI
import android.view.V
import android.widget.RelativeL
import android.widget.TextV
public class BubbleView extends RelativeLayout {
& & & & private TextView mRefreshTime =
& & & & private TextView mLibraryType =
& & & & private TextView mDistance =
& & & & private TextView mCompany =
& & & & private TextView mAddress =
& & & & private TextView mTheme =
& & & & private Context mContext =
& & & & private View mView =
& & & & public BubbleView(Context context, PoiDetailInfo info) {
& & & & & & & & super(context);
& & & & & & & & mContext =
& & & & & & & & initView();
& & & & & & & & //setPoiDetail(info);
& & & & }
& & & & public BubbleView(Context context, AttributeSet attrs) {
& & & & & & & & super(context, attrs);
& & & & & & & & mContext =
& & & & & & & & initView();
& & & & }
& & & & public BubbleView(Context context, AttributeSet attrs, int defStyle) {
& & & & & & & & super(context, attrs, defStyle);
& & & & & & & & mContext =
& & & & & & & & initView();
& & & & }
& & & & /**
& & & &&&* 设置poi详情信息
& & & &&&*
& & & &&&* @param info
& & & &&&*/
& & & & private void setPoiDetail(PoiDetailInfo info) {
& & & & }
& & & & private void initView() {
& & & & & & & & mView = LayoutInflater.from(mContext).inflate(R.layout.bubble, null);
& & & & & & & & int width = 150;//(int) (CRMAppUtil.getDisplayMetrics(mCtx).widthPixels * 0.95);
& & & & & & & & LayoutParams params = new LayoutParams(width, LayoutParams.WRAP_CONTENT);
& & & & & & & & this.addView(mView, params);
& & & & }
& & & & public void setBackgroundResource(int resid) {
& & & & & & & & mView.setBackgroundResource(resid);
& & & & }
}
复制代码
PoiDetailInfo info = new PoiDetailInfo();
& & & & & & & & BubbleView bubble = new BubbleView(this, info);
& & & & & & & & //定义用于显示该InfoWindow的坐标点&&
& & & & & & & & LatLng pt = new LatLng(39.7428);
& & & & & & & & InfoWindow mInfoWindow = new InfoWindow(bubble,pt, -90);
& & & & & & & & mBaiduMap.showInfoWindow(mInfoWindow);复制代码
自己创建view 还是崩溃
崩溃代码如下
12-25 14:25:17.438: E/AndroidRuntime(4572): java.lang.NullPointerException
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:442)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & at android.view.View.measure(View.java:12735)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & at com.baidu.mapapi.map.BitmapDescriptorFactory.fromView(Unknown Source)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & at com.baidu.mapapi.map.BaiduMap.showInfoWindow(Unknown Source)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & .mobnote.golukmobile.MainActivity.pointDataCallback(MainActivity.java:509)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & .mobnote.golukmobile.MainActivity$1.handleMessage(MainActivity.java:278)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & at android.os.Handler.dispatchMessage(Handler.java:99)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & at android.os.Looper.loop(Looper.java:137)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & at android.app.ActivityThread.main(ActivityThread.java:4424)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & at java.lang.reflect.Method.invokeNative(Native Method)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & at java.lang.reflect.Method.invoke(Method.java:511)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-25 14:25:17.438: E/AndroidRuntime(4572): & & & & at dalvik.system.NativeStart.main(Native Method)复制代码
你好&&感谢反馈& & 已转给技术人员跟进后续处理
你好,自定义view继承自Relative才不会crash,直接inflate Relative则会crash,因为是无法获取相对布局的准确宽高
自定义view就是会崩
baiduMap.showInfoWindow(info); 这句报错
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.& && && && & & & & & & & & & & & & & & &
Powered by后使用快捷导航没有帐号?
暂时没有人问过相似的问题,你可以做第一个提问题的人
查看: 2254|回复: 6
android 百度地图最新SDK不能显示多个InfoWindow吗
项目里要用到同时展示多个InfoWindow,请问一下该怎么做
求赏脸,我用Marker来实现此自定义View,可往里面的TextView.settext();Marker里面没更新。
infowindow 设计的初衷就是一个marker 的弹出窗& &所以不能一次显示多个
难道就无法实现多弹窗的操作吗
infowindow 设计的初衷就是一个marker 的弹出窗& &所以不能一次显示多个
如果需要在每个marker上面显示文字内容 怎么实现呢
如果需要在每个marker上面显示文字内容 怎么实现呢
目前Marker不支持多个文字内容的显示
发表于 7&天前
什么时候能实现?为什么js和web的有,android没有?
Powered by后使用快捷导航没有帐号?
暂时没有人问过相似的问题,你可以做第一个提问题的人
查看: 5356|回复: 15
关于InfoWindow 隐藏的问题
1.我要实现的功能效果图如下,当点击mark时弹出框,当再次点击时可以取消infowindow,同时 在弹出的infowindow上可以点击 打电话和定位追踪,跳转
10-58-09.png (61.96 KB, 下载次数: 0)
10:58 上传
10-46-38.png (59.59 KB, 下载次数: 0)
10:56 上传
代码截图:
10-49-21.png (72.94 KB, 下载次数: 0)
10:56 上传
2.问题是:
& & (1)如果在 line 464,给infowindow添加点击clicklistener,让其消失。那么上面的 打电话 button和 定位追踪的button点击事件则不会响应.
& && & 不 给infowindow添加点击clicklistener,那要怎样才能令infowindow 隐藏呢
& & (2)onMarkerClick()&&方法,当重复点击同一个mark时,则不会被响应
& &开发环境android 2.3.3,Nexus5(android 4.4.3) 测试,地图sdk BaiduLBS_Android.jar&&libBaiduMapSDK_v3_2_0_15.so
4.请帮助分析并给出解决方法,谢谢.
/s/1o6smTzc
你好,首先:ruguo infowindow传入的是图片,可以实现点击事件监听取处理infowindow的点击,如果传入的是view,需要自己处理点击事件,SDK提供的listener是不能用的,
第二,上面说要实现点击marker现实弹窗,再点击marker隐藏弹窗,你demo中用的是3.2.0,是infowindow现实以后无法点击marker,这个是bug,已经在3.3.0修复了,现在使用3.3.0可以实现:点击marker现实infowindow,再点击marker时调用hide就可以隐藏了,只不过需要你自己控制显示和隐藏的时机,比如第一次点击调用show,第二次点击调用hide
你好&&感谢反馈 我们协调技术人员帮你看一下 ~
好的,谢谢。请尽快给答复,qq:
版主,@senny_hi&&有结果了吗,请帮助看下这个bug吧
你好,在地图点击回调中,使用hideInfoWindow()隐藏InfoWindow即可。希望你能提供一个简单的demo,以便我们帮你分析以下问题。
简单的demo,请点击 下载
(1)希望达到的效果:
& & 点击mark时,可显示infowindow, 点击mark时,可隐藏infowindow
请尽快给答复啊
版主在吗,能跟踪下这个问题吗
在线狂等!!!!!!!
感谢反馈  我们尽快安排技术人员帮你跟进 !
问题解决了,谢谢
问题解决了,谢谢
怎么解决的啊&&能告诉下吗
你们是些猪
发表于 昨天&17:31
简单的demo,请点击 下载 /s/1o6smTzc
(1)希望达到的效果:
& & 点击mark时,可显示in ...
能不能点击其他地方时候,infowindow消失呢
Powered byandroid百度地图图层绘制_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
android百度地图图层绘制
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
你可能喜欢

我要回帖

更多关于 高德地图infowindow 的文章

 

随机推荐