热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

groundandroid百度地图bitmap太大,Android百度地图覆盖

转载请标明出处:http:blog.csdn.nettanzuaiarticledetails43833125本篇博客要实现的功能先上效果图:上面就是我

转载请标明出处:http://blog.csdn.net/tanzuai/article/details/43833125

本篇博客要实现的功能

先上效果图:

0818b9ca8b590ca3270a3433284dd417.png

上面就是我们最终要实现的效果

1.首先我们来介绍下要实现的功能:

A.更改坐标的位置

B.更改坐标的图标

C.删除图标

D.坐标每隔一段时间变动一次

clear.覆盖物的清楚

2.下面我们通过实例,一一的解析上面的功能

2.1首先我们初始化要用到的变量

/**

* MapView 是地图主控件

*/

private MapView mMapView;

/**

* 百度地图

*/

private BaiduMap mBaiduMap;

/**

* Marker表示为标记

*/

private Marker mMarkerA;

private Marker mMarkerB;

private Marker mMarkerC;

private Marker mMarkerD;

//private Marker mMarkerE;

/**

* 信息窗

*/

private InfoWindow mInfoWindow;

/**

* 初始化全局 bitmap 信息,不用时及时 recycle

*/

private BitmapDescriptor bdA;

private BitmapDescriptor bdB;

private BitmapDescriptor bdC;

private BitmapDescriptor bdD;

private BitmapDescriptor bd;

private BitmapDescriptor bdGround;

/**

* 初始化布局控件

*/

private void initOfflineLayout() {

mMapView = (MapView) findViewById(R.id.bmapView);

mBaiduMap = mMapView.getMap();

MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(14.0f);

mBaiduMap.setMapStatus(msu);

}

2.2初始化覆盖物,并生成覆盖物相应的行为,最终设置地图的状态

/**

* 初始化覆盖物

*/

public void initOverlay() {

//(LatLng表示坐标位置 第一个参数为维度,第一个参数为经度)

LatLng llA = new LatLng(39.963175, 116.400244);

LatLng llB = new LatLng(39.942821, 116.369199);

LatLng llC = new LatLng(39.939723, 116.425541);

LatLng llD = new LatLng(39.906965, 116.401394);

//LatLng llText = new LatLng(39.86923, 116.397428);

//这里是将图标转化为对象

bdA = BitmapDescriptorFactory

.fromResource(R.drawable.icon_marka);

bdB = BitmapDescriptorFactory

.fromResource(R.drawable.icon_markb);

bdC = BitmapDescriptorFactory

.fromResource(R.drawable.icon_markc);

bdD = BitmapDescriptorFactory

.fromResource(R.drawable.icon_markd);

bd = BitmapDescriptorFactory

.fromResource(R.drawable.icon_gcoding);

bdGround = BitmapDescriptorFactory

.fromResource(R.drawable.ground_overlay);

//定义四种不同类型的覆盖物

OverlayOptions ooA = new MarkerOptions().position(llA).icon(bdA)

.zIndex(9).draggable(true);//OverlayOptions 地图覆盖物选型

mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA));//addOverlay在当前图层添加覆盖物对象

OverlayOptions ooB = new MarkerOptions().position(llB).icon(bdB)

.zIndex(5);

mMarkerB = (Marker) (mBaiduMap.addOverlay(ooB));

OverlayOptions ooC = new MarkerOptions().position(llC).icon(bdC)

.perspective(false).anchor(0.5f, 0.5f).rotate(30).zIndex(7);

mMarkerC = (Marker) (mBaiduMap.addOverlay(ooC));

//将A,B,C三种坐标添加到list中

ArrayList giflist = new ArrayList();

giflist.add(bdA);

giflist.add(bdB);

giflist.add(bdC);

OverlayOptions ooD = new MarkerOptions().position(llD).icons(giflist)

.zIndex(0).period(10);//每隔10毫秒变动下标记(自v3.3.0版本起,SDK提供了给Marker增加动画的能力)

mMarkerD = (Marker) (mBaiduMap.addOverlay(ooD));

//构建文字Option对象,用于在地图上添加文字

//OverlayOptions textOption = new TextOptions()

// .bgColor(0xAAFFFF00)

// .fontSize(24)

// .fontColor(0xFFFF00FF)

// .text("百度地图SDK")

// .rotate(-30)

// .position(llText);

在地图上添加该文字对象并显示

//mMarkerE = (Marker) (mBaiduMap.addOverlay(textOption));

// add ground overlay

LatLng southwest = new LatLng(39.92235, 116.380338);

LatLng northeast = new LatLng(39.947246, 116.414977);

LatLngBounds bounds = new LatLngBounds.Builder().include(northeast)

.include(southwest).build();

OverlayOptions ooGround = new GroundOverlayOptions()

.positionFromBounds(bounds).image(bdGround).transparency(0.8f);

mBaiduMap.addOverlay(ooGround);

//生成变化地图状态

MapStatusUpdate u = MapStatusUpdateFactory

.newLatLng(bounds.getCenter());//newLatLng设置地图新中心点

//设置地图状态

mBaiduMap.setMapStatus(u);

}

2.3设置坐标和地图的监听事件

/**

* 设置坐标和地图的监听事件

*/

private void initOverlayListener() {

//设置坐标点击事件

mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {

public boolean onMarkerClick(final Marker marker) {

Button button = new Button(getApplicationContext());

button.setBackgroundResource(R.drawable.popup);

OnInfoWindowClickListener listener = null;

if (marker == mMarkerA || marker == mMarkerD) {

button.setText("更改位置");

listener = new OnInfoWindowClickListener() {

public void onInfoWindowClick() {

LatLng ll = marker.getPosition();

LatLng llNew = new LatLng(ll.latitude + 0.005,

ll.longitude + 0.005);//改变坐标的维度和经度

marker.setPosition(llNew);//设置坐标的位置

mBaiduMap.hideInfoWindow();//隐藏消息窗

}

};

LatLng ll = marker.getPosition();

mInfoWindow = new InfoWindow(BitmapDescriptorFactory.fromView(button), ll, -47, listener);

mBaiduMap.showInfoWindow(mInfoWindow);//显示消息窗

} else if (marker == mMarkerB) {

button.setText("更改图标");

button.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

marker.setIcon(bd);//改变坐标的图标

mBaiduMap.hideInfoWindow();//隐藏消息窗

}

});

LatLng ll = marker.getPosition();

mInfoWindow = new InfoWindow(button, ll, -47);//设置消息窗

mBaiduMap.showInfoWindow(mInfoWindow);//显示消息窗

} else if (marker == mMarkerC) {

button.setText("删除");

button.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

marker.remove();//删除坐标

mBaiduMap.hideInfoWindow();//隐藏消息窗

}

});

LatLng ll = marker.getPosition();

mInfoWindow = new InfoWindow(button, ll, -47);//设置消息窗

mBaiduMap.showInfoWindow(mInfoWindow);//显示消息窗

}

return true;

}

});

//地图点击事件

mBaiduMap.setOnMapClickListener(new OnMapClickListener() {

@Override

public boolean onMapPoiClick(MapPoi arg0) {

return false;

}

@Override

public void onMapClick(LatLng arg0) {

mBaiduMap.hideInfoWindow();

}

});

}

2.4设置清除和重设按钮相应的事件

/**

* 清除所有Overlay

*

* @param view

*/

public void clearOverlay(View view) {

mBaiduMap.clear();//清除地图上的所有坐标

}

/**

* 重新添加Overlay

*

* @param view

*/

public void resetOverlay(View view) {

clearOverlay(null);

initOverlay();

}

2.5为了节省电量,设置地图相应的生命周期(千万要记住要在onDestroy()方法里面把bitmap资源回收)

@Override

protected void onPause() {

// MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()

mMapView.onPause();

super.onPause();

}

@Override

protected void onResume() {

// MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()

mMapView.onResume();

super.onResume();

}

@Override

protected void onDestroy() {

// MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()

mMapView.onDestroy();

super.onDestroy();

// 回收 bitmap 资源

bdA.recycle();

bdB.recycle();

bdC.recycle();

bdD.recycle();

bd.recycle();

bdGround.recycle();

}



推荐阅读
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • Android源码中的Builder模式及其作用
    本文主要解释了什么是Builder模式以及其作用,并结合Android源码来分析Builder模式的实现。Builder模式是将产品的设计、表示和构建进行分离,通过引入建造者角色,简化了构建复杂产品的流程,并且使得产品的构建可以灵活适应变化。使用Builder模式可以解决开发者需要关注产品表示和构建步骤的问题,并且当构建流程发生变化时,无需修改代码即可适配新的构建流程。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
author-avatar
CHEN--MIN--珊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有