地图每隔几秒闪一下,蛋白markerr被闪消失怎么解决

20779人阅读
百度地图 Android SDK(7)
标注(Marker)是开发者最常使用的地图覆盖物志一,今天就来向大家介绍一些标注(Marker)的最基本使用方法!
实现目标:
1、构建基础地图页面;
2、在地图的中心点处添加 Marker;
3、实现 Marker 的点击事件响应;
4、实现 Marker 的添加和灵活删除;
为了实现以上目标,我们会分成以下若干步骤来进行。
第一步、创建工程,导入百度地图 Android SDK;
具体创建工程的方式(略)。本示例主要是为了实现地图及相关的覆盖物功能,因此这里我只使用 SDK 开发资源下载平台所提供的【基础地图】功能模块即可。
相应下载地址为:/sdk/download
勾选如图所示:
选择完成后,点击开发包下载,将所下载开发包正确导入开发工程。
第二步、申请开发者秘钥;
工程创建完成后,到 API 控制台,申请相应的开发秘钥,为具体开发工作准备。
具体申请方式及注意事项,请参考:http://blog.csdn.net/callmesen/article/details/ &此处不再赘述。
第三步、修改 AndroidManifest 文件,添加开发秘钥和所需权限;
在 AndroidManifest 文件中,添加开发秘钥和所需权限。
添加开发秘钥方式如下:
&meta-data
android:name=&com.baidu.lbsapi.API_KEY&
android:value=&开发秘钥!& /&注意在 application 里面。
添加所需权限如下:
&uses-permission android:name=&android.permission.GET_ACCOUNTS& /&
&uses-permission android:name=&android.permission.USE_CREDENTIALS& /&
&uses-permission android:name=&android.permission.MANAGE_ACCOUNTS& /&
&uses-permission android:name=&android.permission.AUTHENTICATE_ACCOUNTS& /&
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE& /&
&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&com.android.launcher.permission.READ_SETTINGS& /&
&uses-permission android:name=&android.permission.CHANGE_WIFI_STATE& /&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE& /&
&uses-permission android:name=&android.permission.READ_PHONE_STATE& /&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE& /&
&uses-permission android:name=&android.permission.BROADCAST_STICKY& /&
&uses-permission android:name=&android.permission.WRITE_SETTINGS& /&
&uses-permission android:name=&android.permission.READ_PHONE_STATE& /&
第四步、创建基础地图;
在 xml 文件中添加 mapview 控件,如下所示:
&com.baidu.mapapi.map.MapView
android:id=&@+id/bmapView&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:clickable=&true& /&在 java 代码中初始化地图 SDK,实现基础地图的展示://初始化地图 SDK
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//绑定XML中得 mapview 控件
mapView = (MapView) findViewById(R.id.bmapView);
第五步、获取地图中心点,并添加 Marker 对象;
实现的核心代码如下:
baiduMap = mapView.getMap();
LatLng latLng = baiduMap.getMapStatus().
//准备 marker 的图片
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);
//准备 marker option 添加 marker 使用
markerOptions = new MarkerOptions().icon(bitmap).position(latLng);
//获取添加的 marker 这样便于后续的操作
marker = (Marker) baiduMap.addOverlay(markerOptions);
第六步、实现 Marker 的点击事件响应;
利用 baidumap 对象的地图监听方法,实现针对 marker 的点击响应,核心代码如下:
//对 marker 添加点击相应事件
baiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(Marker arg0) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), &Marker被点击了!&, Toast.LENGTH_SHORT).show();
第七步、利用 Button 控件,控制 Marker 的添加删除;
这里用 button 来控制在地图上添加 或者 删除一个 marker,首先在 xml 中添加一个 button 控件:
android:id=&@+id/button1&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_alignParentRight=&true&
android:layout_alignParentTop=&true&
android:text=&删除Marker& /&在 java 代码中添加这个 button 的点击事件响应,核心代码如下:
//按钮控制添加删除 button
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(button.getText() == &添加Marker&)
marker = (Marker) baiduMap.addOverlay(markerOptions);
button.setText(&删除Marker&);
marker.remove();
button.setText(&添加Marker&);
通过以上的操作,就可以实现相应的 marker 添加,marker 点击响应,marker 删除等操作。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:84383次
排名:千里之外
原创:20篇
转载:11篇
评论:16条
(4)(7)(2)(4)(2)(1)(6)(5)解决百度map多个Marker和InfoWindow时总是打开最后一个InfoWindow的有关问题_Web前端大全_优良自学吧 |
当前位置: >
> 解决百度map多个Marker和InfoWindow时总是打开最后一个InfoWindow的有关问题优良自学吧提供解决百度map多个Marker和InfoWindow时总是打开最后一个InfoWindow的有关问题,解决百度地图多个Marker和InfoWindow时总是打开最后一个InfoWindow的问题& & & & &在做项目的过程中,发现了在使用百度地图的过程中,加入多个Marker和多个InfoWindow的时候,多解决百度地图多个Marker和InfoWindow时总是打开最后一个InfoWindow的问题& & & & &在做项目的过程中,发现了在使用百度地图的过程中,加入多个Marker和多个InfoWindow的时候,多个Marker可以在地图上不同的坐标点显示出来,但是当点击不同的Marker的时候,显示的总是最后一个Marker对应的InfoWindow。至少直接写For循环是这个样子的。
于是乎我看到之前的代码是对应着写:Marker1,InfoWindow1, Marker2,InfoWindow2, Marker3,InfoWindow3。我的个天呀,如果是100个呢?那得有多少的代码呀?
下面的代码是在原代码的基础上修改的,肯定还有很大提升的空间。
我们取到的数据,也就是下面data中的数据:
[{&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&:&&}]
//获取子景点
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);
(本文来自互联网,不代表搜站(/)的观点和立场)本站所有内容来自互联网,若本站收录的信息无意侵犯了贵司版权,请给我们来信(),我们会及时处理和回复,谢谢编辑推荐最近更新百度地图给map添加右键菜单(判断是否为marker)
作者:屠龙灬世家
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了百度地图给map添加右键菜单(判断是否为marker) 的相关资料,需要的朋友可以参考下
废话不多说了,直接给大家贴代码了。
map.addEventListener("rightclick",function(e){
if(e.overlay){//判断右键单击的是否是marker
s = e.point.//经度
w = e.point.//维度
RightClick();//右键单击map出现右键菜单事件
//右键单击map出现右键菜单事件
function RightClick(){
//alert('你点击的是地图');
var createMarker = function(map){//右键更新站名
if (confirm("要新建站点吗?")){
$(".AllSetMassage").show();
var markerMenu=new BMap.ContextMenu();
markerMenu.addItem(new BMap.MenuItem('新建站点',createMarker.bind(map)));
map.addContextMenu(markerMenu);//给标记添加右键菜单
右键单击map(非marker)
右键单击marker:
PS:百度地图给多个marker添加右键菜单(删除、更新)
$.getJSON("./GetStationPlaceServlet",function(json){
for(var i=;i&json.i++){
var obj = eval(json);
//获取经纬度
fStationlon = parseFloat(obj[i].Stationlon);
fStationlat = parseFloat(obj[i].Stationlat);
var pt = new BMap.Point(fStationlon,fStationlat);
var myIcon = new BMap.Icon("photo/station.png",new BMap.Size(,),{ anchor: new BMap.Size(, ) });
var marker = new BMap.Marker(pt,{icon:myIcon}); // 创建标注
map.addOverlay(marker); //将标注添加到地图中
var strRes = parseFloat(obj[i].StationId);
addClickHandler(strRes,marker);//左键单击marker事件
RightClickHandler(strRes,marker);//右键单击marker出现右键菜单事件
RightClick();//右键地图出现右键菜单事件
//右键单击marker出现右键菜单事件
function RightClickHandler(stationId,marker){
var removeMarker = function(e,ee,marker){//右键删除站点
var json={
"StationId":stationId,
if (confirm("要删除站点"+stationId+"吗?")){
$.getJSON("./DeleteStationServlet",{json:JSON.stringify(json)},function(json){
if(json.result==true){
alert("删除站点"+stationId+"成功!");
map.removeOverlay(marker); //将地图中的标记删除
var updateMarker = function(marker){//右键更新站名
if (confirm("要修改站点"+stationId+"的站名吗?")){
$(".AllUpdateMassage").show();
$("#stationId").val(stationId);
var markerMenu=new BMap.ContextMenu();
markerMenu.addItem(new BMap.MenuItem('删除站点',removeMarker.bind(marker)));
markerMenu.addItem(new BMap.MenuItem('修改站名',updateMarker.bind(marker)));
marker.addContextMenu(markerMenu);//给标记添加右键菜单
//鼠标左键单击marker事件
function addClickHandler(stationId,marker){
marker.addEventListener("click",function(e){
var p = marker.getPosition(); //获取marker的位置
var staId={
"StationId":stationId,
$.getJSON("./GetStationInfoServlet",{json:JSON.stringify(staId)},function(json){
for(var i=;i&json.i++){
var obj = eval(json);
stationName = obj[i].stationN
var content = "站点编号:"+stationId+"&br/&"+ "站点名称:"+stationN
openInfo(content,e);
//左键单击marker弹出窗口事件
function openInfo(content,e){
var p = e.
var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
var infoWindow = Window(content,opts); // 创建信息窗口对象
map.openInfoWindow(infoWindow,point); //开启信息窗口
//修改站点站名
function update(){
var stationId=$("#stationId").val();//编号
var stationName=$(".AllUpdateMassage_name").val();//名字
var json={
"StationId":stationId,
"StationName":stationName
$.getJSON("./UpdateStationServlet",{json:JSON.stringify(json)},function(json){
if(json.result==true){
alert("站点"+stationId+"站名修改成功!");
$(".AllUpdateMassage").hide();
alert("失败!");
地图上和数据库中都已删除此点信息:
我在实现这个时,发现有人只能在一个marker上添加右键菜单。我这个不存在这个问题。原理好像是关于闭包啥的,我也是新手不是很清楚,望懂得人不惜指教。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具解决Fragment中使用地图,切换会闪一下黑屏的问题 - 博客频道 - CSDN.NET
貌似掉线的博客
疯狂的键盘
分类:Android笔记
我用的是高德的3D地图,用2D地图无此问题。
从答案来看,大概是SurfactView与Fragment之间的问题。虽然我用的是高德,不过这方法估计对百度地图也有效。
解决方法是,在使用到地图的Activity中的onCreate中添加以下代码:
getWindow().setFormat(PixelFormat.TRANSLUCENT);
另外有群友提到一种方法,也发一下吧:
最佳做法是在activity 的 root view 里面 加入一个 长宽都是0px的 不可见 SurfaceView元素
maosidiaoxian
排名:第1012名
Android高级开发群:
Andriod Studio Tech:
(2)(16)(68)(1)(3)(6)(3)(55)(26)(2)(1)(1)
(133150)01:23 提问
百度地图API开发,使用MarkerClusterer进行点聚合的问题
新手求助,我开发的程序在地图上放置marker,是通过一个函数完成的:
function addMarker(getPoint,outContent,titleContent){
var opts = {
position : getPoint, // 指定文本标注所在的地理位置
offset : new BMap.Size(10, 0) //设置文本偏移量
var label = new BMap.Label(titleContent, opts); // 创建文本标注对象
label.setStyle({
color : "red",
fontSize : "12px",
height : "20px",
lineHeight : "20px",
fontFamily:"微软雅黑"
var marker = new BMap.Marker(getPoint);
var infoWindow = Window(outContent,{width:300}); // 创建信息窗口对象
// var titleWindow = Window(titleContent,
{width:50,height:5});
map.addOverlay(marker);
marker.addEventListener("mouseover",function() {this.map.addOverlay(label);});
marker.addEventListener("mouseout",function() {this.map.removeOverlay(label);});
marker.addEventListener("click", function(){
this.openInfoWindow(infoWindow);
document.getElementById('smallpic').onload = function ()
{infoWindow.redraw();}
然后再用for循环将已经读取好的每个点的坐标、需要显示的label、需要弹窗的infowindow的内容等输入函数,在地图上标点:
for (i = 0; i & locations. i++) {
addMarker(point,readContent,titleContent);
现在的问题是点很多,需要用MarkerClusterer进行点聚合,但是如果按照示例代码那样,建一个数组将坐标全部导入,聚合是成功了,但生成的聚合点是没有label和infowindow的,感觉像是聚合点是直接生成了一批新的marker盖在上面了。请问要怎么写才能解决这个问题?谢谢!
按赞数排序
在创建marker时候给marker添加窗口监听事件
关键代码:
// 创建标注
var marker2 = new BMap.Marker(pt, {icon : myIcon});
var infoWindow2 = Window(text);
marker2.addEventListener("click", function() {
this.openInfoWindow(infoWindow2);
参看我的事例
你好,我想问一下,百度地图API点聚合怎么批量添加点。事例代码中,有“生成一个marker数组,然后调用markerClusterer类即可”。这个是怎么添加点的数据,怎么调用,求解答
你好,能给个代码参考下吗? 在下感激不尽!
能慷慨的给个代码 参考下吗。最近被这个房源的聚合地图搞疯 了。
501关注|151收录
737关注|426收录
677关注|1142收录
其他相似问题}

我要回帖

更多关于 解决toast 不自动消失 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信