Android百度地图深入学习(2)
来源:互联网 发布:淘宝达人申请大v认证 编辑:程序博客网 时间:2024/05/21 21:45
添加覆盖物、覆盖物点击的处理
大体步骤:
Marker
OverlayOptions指定位置和图标
InfoWindow
BaiduMap.showInfoWindow();
BaiduMap.hideInfoWindow();
/baidudemo/src/com/xbmu/baidudemo/Info.java
package com.xbmu.baidudemo;import java.io.Serializable;import java.util.ArrayList;import java.util.List;public class Info implements Serializable{private double latitude;private double longitude;private int imgId;private String name;private String distance;private int zan;public static List<Info> infos = new ArrayList<Info>();static{infos.add(new Info(34.242652, 108.971171, R.drawable.a01, "英伦贵族小旅馆","距离209米", 1456));infos.add(new Info(34.242952, 108.972171, R.drawable.a02, "沙井国际洗浴会所","距离897米", 456));infos.add(new Info(34.242852, 108.973171, R.drawable.a03, "五环服装城","距离249米", 1456));infos.add(new Info(34.242152, 108.971971, R.drawable.a04, "老米家泡馍小炒","距离679米", 1456));}public Info(double latitude, double longitude, int imgId, String name,String distance, int zan) {super();this.latitude = latitude;this.longitude = longitude;this.imgId = imgId;this.name = name;this.distance = distance;this.zan = zan;}public double getLatitude() {return latitude;}public void setLatitude(double latitude) {this.latitude = latitude;}public double getLongitude() {return longitude;}public void setLongitude(double longitude) {this.longitude = longitude;}public int getImgId() {return imgId;}public void setImgId(int imgId) {this.imgId = imgId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDistance() {return distance;}public void setDistance(String distance) {this.distance = distance;}public int getZan() {return zan;}public void setZan(int zan) {this.zan = zan;}}/baidudemo/res/layout/activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> <RelativeLayout android:id="@+id/id_maker_ly" android:layout_width="match_parent" android:layout_height="220dp" android:layout_alignParentBottom="true" android:background="#cc4e5a6b" android:clickable="true" android:visibility="gone" > <ImageView android:id="@+id/id_info_img" android:layout_width="fill_parent" android:layout_height="150dp" android:layout_marginBottom="10dp" android:layout_marginLeft="12dp" android:layout_marginRight="12dp" android:layout_marginTop="10dp" android:background="@drawable/img_border" android:scaleType="fitXY" android:src="@drawable/a01" > </ImageView> <RelativeLayout android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:background="@drawable/bg_map_bottom" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:orientation="vertical" > <TextView android:id="@+id/id_info_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="老米家泡馍" android:textColor="#fff5eb" /> <TextView android:id="@+id/id_info_distance" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="距离200米" android:textColor="#fff5eb" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="20dp" android:orientation="horizontal" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/map_zan" android:clickable="true" /> <TextView android:id="@+id/id_info_zan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="789" android:textColor="#fff5eb" /> </LinearLayout> </RelativeLayout> </RelativeLayout></RelativeLayout>/baidudemo/res/menu/main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/id_map_common" android:showAsAction="never" android:title="普通地图"/> <item android:id="@+id/id_map_site" android:showAsAction="never" android:title="卫星地图"/> <item android:id="@+id/id_map_traffic" android:showAsAction="never" android:title="实时交通(off)"/> <item android:id="@+id/id_map_location" android:showAsAction="never" android:title="我的位置"/> <item android:id="@+id/id_map_mode_common" android:showAsAction="never" android:title="普通模式"/> <item android:id="@+id/id_map_mode_following" android:showAsAction="never" android:title="跟随模式"/> <item android:id="@+id/id_map_mode_compass" android:showAsAction="never" android:title="罗盘模式"/> <item android:id="@+id/id_add_overlay" android:showAsAction="never" android:title="添加覆盖物"/></menu>MainActivity.java
package com.xbmu.baidudemo;import java.io.Serializable;import java.util.List;import android.app.Activity;import android.content.Context;import android.graphics.Color;import android.graphics.Point;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.Window;import android.widget.ImageView;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BaiduMap.OnMapClickListener;import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.InfoWindow;import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;import com.baidu.mapapi.map.MapPoi;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.Marker;import com.baidu.mapapi.map.MarkerOptions;import com.baidu.mapapi.map.MyLocationConfiguration;import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.map.OverlayOptions;import com.baidu.mapapi.model.LatLng;import com.xbmu.baidudemo.MyOrientationListener.OnOrientationListener;public class MainActivity extends Activity {private MapView mMapView;private BaiduMap mBaiduMap;private Context context;// 定位相关private LocationClient mLocationClient;private MyLocationListener mLocationListener;private boolean isFirstIn = true;private double mLatitude;private double mLongtitude;// 自定义定位图标private BitmapDescriptor mIconLocation;private MyOrientationListener myOrientationListener;private float mCurrentX;private LocationMode mLocationMode;// 覆盖物相关private BitmapDescriptor mMarker;private RelativeLayout mMarkerLy;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);// 在使用SDK各组件之前初始化context信息,传入ApplicationContext// 注意该方法要再setContentView方法之前实现SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);this.context = this;initView();// 初始化定位initLocation();initMarker();mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {@Overridepublic boolean onMarkerClick(Marker marker) {Bundle extraInfo = marker.getExtraInfo();Info info = (Info) extraInfo.getSerializable("info");ImageView iv = (ImageView) mMarkerLy.findViewById(R.id.id_info_img);TextView distance = (TextView) mMarkerLy.findViewById(R.id.id_info_distance);TextView name = (TextView) mMarkerLy.findViewById(R.id.id_info_name);TextView zan = (TextView) mMarkerLy.findViewById(R.id.id_info_zan);iv.setImageResource(info.getImgId());distance.setText(info.getDistance());name.setText(info.getName());zan.setText(info.getZan() + "");InfoWindow infoWindow;TextView tv = new TextView(context);tv.setBackgroundResource(R.drawable.location_tips);tv.setPadding(30, 20, 30, 50);tv.setText(info.getName());tv.setTextColor(Color.parseColor("#ffffff"));final LatLng latLng = marker.getPosition();Point p = mBaiduMap.getProjection().toScreenLocation(latLng);p.y -= 47;LatLng ll = mBaiduMap.getProjection().fromScreenLocation(p);// infoWindow = new InfoWindow(tv, ll,// new OnInfoWindowClickListener() {//// @Override// public void onInfoWindowClick() {// mBaiduMap.hideInfoWindow();//// }// });infoWindow = new InfoWindow(mMarker, ll, 0,new OnInfoWindowClickListener() {@Overridepublic void onInfoWindowClick() {mBaiduMap.hideInfoWindow();}});mBaiduMap.showInfoWindow(infoWindow);mMarkerLy.setVisibility(View.VISIBLE);return true;}});mBaiduMap.setOnMapClickListener(new OnMapClickListener() {@Overridepublic boolean onMapPoiClick(MapPoi arg0) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onMapClick(LatLng arg0) {mMarkerLy.setVisibility(View.GONE);mBaiduMap.hideInfoWindow();}});}private void initMarker() {mMarker = BitmapDescriptorFactory.fromResource(R.drawable.maker);mMarkerLy = (RelativeLayout) findViewById(R.id.id_maker_ly);}private void initLocation() {mLocationMode = LocationMode.NORMAL;mLocationClient = new LocationClient(this);mLocationListener = new MyLocationListener();mLocationClient.registerLocationListener(mLocationListener);LocationClientOption option = new LocationClientOption();option.setCoorType("bd09ll");option.setIsNeedAddress(true);option.setOpenGps(true);option.setScanSpan(1000);mLocationClient.setLocOption(option);// 初始化图标mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps_locked);myOrientationListener = new MyOrientationListener(context);myOrientationListener.setOnOrientationListener(new OnOrientationListener() {@Overridepublic void onOrientationChanged(float x) {mCurrentX = x;}});}private void initView() {mMapView = (MapView) findViewById(R.id.bmapView);mBaiduMap = mMapView.getMap();MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);mBaiduMap.setMapStatus(msu);}@Overrideprotected void onPause() {super.onPause();// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理mMapView.onPause();}@Overrideprotected void onStart() {super.onStart();// 开启定位mBaiduMap.setMyLocationEnabled(true);if (!mLocationClient.isStarted())mLocationClient.start();// 开启方向传感器myOrientationListener.start();}@Overrideprotected void onResume() {super.onResume();// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理mMapView.onResume();}@Overrideprotected void onStop() {super.onStop();// 关闭定位mBaiduMap.setMyLocationEnabled(false);mLocationClient.stop();// 停止方向传感器myOrientationListener.stop();}@Overrideprotected void onDestroy() {super.onDestroy();// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.id_map_common:mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);break;case R.id.id_map_site:mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);break;case R.id.id_map_traffic:if (mBaiduMap.isTrafficEnabled()) {// 为true,可以进行实时交通。// 菜单项再点击一次就不能进行实时交通,并修改显示信息mBaiduMap.setTrafficEnabled(false);item.setTitle("实时交通(off)");} else {mBaiduMap.setTrafficEnabled(true);item.setTitle("实时交通(on)");}break;case R.id.id_map_location:centerToMyLocation();break;case R.id.id_map_mode_common:mLocationMode = LocationMode.NORMAL;break;case R.id.id_map_mode_following:mLocationMode = LocationMode.FOLLOWING;break;case R.id.id_map_mode_compass:mLocationMode = LocationMode.COMPASS;break;case R.id.id_add_overlay:addOverlays(Info.infos);default:break;}return super.onOptionsItemSelected(item);}/** * 添加覆盖物 * * @param infos */private void addOverlays(List<Info> infos) {mBaiduMap.clear();LatLng latLng = null;Marker marker = null;OverlayOptions options;for (Info info : infos) {// 经纬度latLng = new LatLng(info.getLatitude(), info.getLongitude());// 图标options = new MarkerOptions().position(latLng).icon(mMarker).zIndex(5);marker = (Marker) mBaiduMap.addOverlay(options);Bundle bundle = new Bundle();bundle.putSerializable("info", info);marker.setExtraInfo(bundle);}MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.setMapStatus(msu);}/** 定位到我的位置 */private void centerToMyLocation() {LatLng latLng = new LatLng(mLatitude, mLongtitude);MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.animateMapStatus(msu);}private class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {// 构造定位数据MyLocationData data = new MyLocationData.Builder()//.direction(mCurrentX)//.accuracy(location.getRadius())//.latitude(location.getLatitude())//.longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(data);// 设置自定义图标MyLocationConfiguration config = new MyLocationConfiguration(mLocationMode, true, mIconLocation);mBaiduMap.setMyLocationConfigeration(config);// 更细经纬度mLatitude = location.getLatitude();mLongtitude = location.getLongitude();if (isFirstIn) {LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.animateMapStatus(msu);isFirstIn = false;Toast.makeText(context, location.getAddrStr(), 0).show();}}}}运行效果:
全部代码:http://download.csdn.net/detail/btt2013/9508829
感谢慕课网提供的教学资料,不断学习,乐于分享。
0 0
- Android百度地图深入学习(2)
- Android百度地图深入学习(1)
- Android学习(20)-百度地图使用
- Android百度地图学习笔记(一)
- Android--百度地图学习笔记(一)
- 深入学习百度地图Android SDK v4.0.0【第一关】基础地图
- 深入学习百度地图Android SDK v4.0.0【第二关】公交地图
- 深入学习百度地图Android SDK v4.0.0【第六关】室内地图
- 深入学习百度地图Android SDK v4.0.0【第八关】离线地图
- 深入学习百度地图Android SDK v4.0.0【第三关】路线规划
- 深入学习百度地图Android SDK v4.0.0【第四关】OpenGL绘制
- 深入学习百度地图Android SDK v4.0.0【第五关】瓦片图层
- 深入学习百度地图Android SDK v4.0.0【第七关】周边雷达
- 深入学习百度地图Android SDK v4.0.0【第九关】检索功能
- 深入学习百度地图Android SDK v4.0.0【第十关】短链分享
- 深入学习百度地图Android SDK v4.0.0【第七关】周边雷达
- Android--百度地图学习(第一章)如何搭建百度地图的环境
- Android 百度地图API学习(一) 开始使用百度地图
- iOS之性能优化
- 常见的iOS对动画的操作
- 快速认识和使用浏览器跟踪Http服务及Http服务调试工具
- Swift-简单值
- 实现大数字加减。
- Android百度地图深入学习(2)
- AsyncTask源码分析
- oracle导入dmp文件命令、sql文件命令, Oracle用户的新增、修改、删除及授权
- Android——消息机制
- 微软的基于webgl的H5 3D游戏引擎
- Windows下CURL扩展无效之终极解决办法。
- Tomcat 内存溢出,堆栈配置各种调整
- codeforce 165C Another Problem on Strings
- 机器学习中怎样的特征才是好特征