1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 百度地图之添加覆盖物并响应事件

百度地图之添加覆盖物并响应事件

时间:2022-11-22 00:14:50

相关推荐

百度地图之添加覆盖物并响应事件

随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

本文中将介绍在百度地图上添加覆盖物的功能、响应点击功能和弹出pop功能,代码来自百度Demo:

Activity:

package com.home;import java.util.ArrayList;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.map.ItemizedOverlay;import com.baidu.mapapi.map.MapController;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.OverlayItem;import com.baidu.mapapi.map.PopupClickListener;import com.baidu.mapapi.map.PopupOverlay;import com.api.basestruct.GeoPoint;/*** 演示覆盖物的用法*/public class OverlayActivity extends Activity {/*** MapView 是地图主控件*/private MapView mMapView = null;/*** 用MapController完成地图控制*/private MapController mMapController = null;private MyOverlay mOverlay = null;private PopupOverlay pop = null;private ArrayList<OverlayItem> mItems = null;private TextView popupText = null;private View viewCache = null;private View popupInfo = null;private View popupLeft = null;private View popupRight = null;private Button button = null;private MapView.LayoutParams layoutParam = null;private OverlayItem mCurItem = null;/*** overlay 位置坐标*/double mLon1 = 116.400244;double mLat1 = 39.963175;double mLon2 = 116.369199;double mLat2 = 39.942821;double mLon3 = 116.425541;double mLat3 = 39.939723;double mLon4 = 116.401394;double mLat4 = 39.906965;double mLon5 = 116.402096;double mLat5 = 39.942057;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/*** 使用地图sdk前需先初始化BMapManager. BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,* 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁*/DemoApplication app = (DemoApplication) this.getApplication();if (app.mBMapManager == null) {app.mBMapManager = new BMapManager(this);/*** 如果BMapManager没有初始化则初始化BMapManager*/app.mBMapManager.init(DemoApplication.strKey,new DemoApplication.MyGeneralListener());}/*** 由于MapView在setContentView()中初始化,所以它需要在BMapManager初始化之后*/setContentView(R.layout.activity_overlay);mMapView = (MapView) findViewById(R.id.bmapView);/*** 获取地图控制器*/mMapController = mMapView.getController();/*** 设置地图是否响应点击事件 .*/mMapController.enableClick(true);/*** 设置地图缩放级别*/mMapController.setZoom(14);/*** 显示内置缩放控件*/mMapView.setBuiltInZoomControls(true);initOverlay();/*** 设定地图中心点*/GeoPoint p = new GeoPoint((int) (mLat5 * 1E6), (int) (mLon5 * 1E6));mMapController.setCenter(p);}public void initOverlay() {/*** 创建自定义overlay*/mOverlay = new MyOverlay(getResources().getDrawable(R.drawable.icon_marka), mMapView);/*** 准备overlay 数据*/GeoPoint p1 = new GeoPoint((int) (mLat1 * 1E6), (int) (mLon1 * 1E6));OverlayItem item1 = new OverlayItem(p1, "覆盖物1", "");/*** 设置overlay图标,如不设置,则使用创建ItemizedOverlay时的默认图标.*/item1.setMarker(getResources().getDrawable(R.drawable.icon_marka));GeoPoint p2 = new GeoPoint((int) (mLat2 * 1E6), (int) (mLon2 * 1E6));OverlayItem item2 = new OverlayItem(p2, "覆盖物2", "");item2.setMarker(getResources().getDrawable(R.drawable.icon_markb));GeoPoint p3 = new GeoPoint((int) (mLat3 * 1E6), (int) (mLon3 * 1E6));OverlayItem item3 = new OverlayItem(p3, "覆盖物3", "");item3.setMarker(getResources().getDrawable(R.drawable.icon_markc));GeoPoint p4 = new GeoPoint((int) (mLat4 * 1E6), (int) (mLon4 * 1E6));OverlayItem item4 = new OverlayItem(p4, "覆盖物4", "");item4.setMarker(getResources().getDrawable(R.drawable.icon_markd));GeoPoint p5 = new GeoPoint((int) (mLat5 * 1E6), (int) (mLon5 * 1E6));OverlayItem item5 = new OverlayItem(p5, "覆盖物5", "");item5.setMarker(getResources().getDrawable(R.drawable.icon_gcoding));/*** 将item 添加到overlay中 注意: 同一个item只能add一次*/mOverlay.addItem(item1);mOverlay.addItem(item2);mOverlay.addItem(item3);mOverlay.addItem(item4);mOverlay.addItem(item5);/*** 保存所有item,以便overlay在reset后重新添加*/mItems = new ArrayList<OverlayItem>();mItems.addAll(mOverlay.getAllItem());/*** 将overlay 添加至MapView中*/mMapView.getOverlays().add(mOverlay);/*** 刷新地图*/mMapView.refresh();/*** 向地图添加自定义View.*/viewCache = getLayoutInflater().inflate(R.layout.custom_text_view, null);popupInfo = (View) viewCache.findViewById(R.id.popinfo);popupLeft = (View) viewCache.findViewById(R.id.popleft);popupRight = (View) viewCache.findViewById(R.id.popright);popupText = (TextView) viewCache.findViewById(R.id.textcache);button = new Button(this);button.setBackgroundResource(R.drawable.popup);/*** 创建一个popupoverlay*/PopupClickListener popListener = new PopupClickListener() {@Overridepublic void onClickedPopup(int index) {if (index == 0) {// 更新item位置pop.hidePop();GeoPoint p = new GeoPoint(mCurItem.getPoint().getLatitudeE6() + 5000, mCurItem.getPoint().getLongitudeE6() + 5000);mCurItem.setGeoPoint(p);mOverlay.updateItem(mCurItem);mMapView.refresh();} else if (index == 2) {// 更新图标mCurItem.setMarker(getResources().getDrawable(R.drawable.nav_turn_via_1));mOverlay.updateItem(mCurItem);mMapView.refresh();}}};pop = new PopupOverlay(mMapView, popListener);}/*** 清除所有Overlay* * @param view*/public void clearOverlay(View view) {mOverlay.removeAll();if (pop != null) {pop.hidePop();}mMapView.removeView(button);mMapView.refresh();}/*** 重新添加Overlay* * @param view*/public void resetOverlay(View view) {clearOverlay(null);// 重新add overlaymOverlay.addItem(mItems);mMapView.refresh();}@Overrideprotected void onPause() {/*** MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()*/mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {/*** MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()*/mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {/*** MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()*/mMapView.destroy();super.onDestroy();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);mMapView.onRestoreInstanceState(savedInstanceState);}public class MyOverlay extends ItemizedOverlay {public MyOverlay(Drawable defaultMarker, MapView mapView) {super(defaultMarker, mapView);}@Overridepublic boolean onTap(int index) {OverlayItem item = getItem(index);mCurItem = item;if (index == 4) {button.setText("这是一个系统控件");GeoPoint pt = new GeoPoint((int) (mLat5 * 1E6),(int) (mLon5 * 1E6));// 创建布局参数layoutParam = new MapView.LayoutParams(// 控件宽,继承自ViewGroup.LayoutParamsMapView.LayoutParams.WRAP_CONTENT,// 控件高,继承自ViewGroup.LayoutParamsMapView.LayoutParams.WRAP_CONTENT,// 使控件固定在某个地理位置pt, 0, -32,// 控件对齐方式MapView.LayoutParams.BOTTOM_CENTER);// 添加View到MapView中mMapView.addView(button, layoutParam);} else {popupText.setText(getItem(index).getTitle());Bitmap[] bitMaps = { BMapUtil.getBitmapFromView(popupLeft),BMapUtil.getBitmapFromView(popupInfo),BMapUtil.getBitmapFromView(popupRight) };pop.showPopup(bitMaps, item.getPoint(), 32);}return true;}@Overridepublic boolean onTap(GeoPoint pt, MapView mMapView) {if (pop != null) {pop.hidePop();mMapView.removeView(button);}return false;}}}

地图工具类(BMapUtil)同上文。

custom_text_view.xml同上文。

配置文件及Application类均与之前的一样。

布局文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><Buttonandroid:id="@+id/clear"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginBottom="2dip"android:layout_marginLeft="2dip"android:layout_marginRight="2dip"android:layout_marginTop="2dip"android:layout_weight="1"android:background="@drawable/button_style"android:onClick="clearOverlay"android:padding="10dip"android:text="清除(clear)" /><Buttonandroid:id="@+id/resert"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginBottom="2dip"android:layout_marginLeft="2dip"android:layout_marginRight="2dip"android:layout_marginTop="2dip"android:layout_weight="1"android:background="@drawable/button_style"android:onClick="resetOverlay"android:text="重置(reset)" /></LinearLayout><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="true" /></LinearLayout>

附上图片效果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。