package baidumapsdk.demo.map; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; import com.baidu.mapapi.favorite.FavoriteManager; import com.baidu.mapapi.favorite.FavoritePoiInfo; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BaiduMap.OnMapClickListener; import com.baidu.mapapi.map.BaiduMap.OnMapLongClickListener; 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.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.model.LatLng; import java.util.ArrayList; import java.util.List; import baidumapsdk.demo.R; /** * 演示如何使用本地点收藏功能 */ public class FavoriteDemo extends Activity implements OnMapLongClickListener, OnMarkerClickListener, OnMapClickListener { // 地图相关 private MapView mMapView; private BaiduMap mBaiduMap; // 界面控件相关 private EditText locationText; private EditText nameText; private View mPop; private View mModify; EditText mdifyName; // 保存点中的点id private String currentID; // 现实marker的图标 BitmapDescriptor bdA = BitmapDescriptorFactory .fromResource(R.drawable.icon_marka); List<Marker> markers = new ArrayList<Marker>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_favorite); // 初始化地图 mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); mBaiduMap.setOnMapLongClickListener(this); mBaiduMap.setOnMarkerClickListener(this); mBaiduMap.setOnMapClickListener(this); // 初始化收藏夹 FavoriteManager.getInstance().init(); // 初始化UI initUI(); } public void initUI() { locationText = (EditText) findViewById(R.id.pt); nameText = (EditText) findViewById(R.id.name); LayoutInflater mInflater = getLayoutInflater(); mPop = (View) mInflater.inflate(R.layout.activity_favorite_infowindow, null, false); } /** * 添加收藏点 * * @param v */ public void saveClick(View v) { if (nameText.getText().toString() == null || nameText.getText().toString().equals("")) { Toast.makeText(FavoriteDemo.this, "名称必填", Toast.LENGTH_LONG) .show(); return; } if (locationText.getText().toString() == null || locationText.getText().toString().equals("")) { Toast.makeText(FavoriteDemo.this, "坐标点必填", Toast.LENGTH_LONG) .show(); return; } FavoritePoiInfo info = new FavoritePoiInfo(); info.poiName(nameText.getText().toString()); LatLng pt; try { String strPt = locationText.getText().toString(); String lat = strPt.substring(0, strPt.indexOf(",")); String lng = strPt.substring(strPt.indexOf(",") + 1); pt = new LatLng(Double.parseDouble(lat), Double.parseDouble(lng)); info.pt(pt); if (FavoriteManager.getInstance().add(info) == 1) { Toast.makeText(FavoriteDemo.this, "添加成功", Toast.LENGTH_LONG).show(); } else { Toast.makeText(FavoriteDemo.this, "添加失败", Toast.LENGTH_LONG).show(); } } catch (Exception e) { // TODO: handle exception Toast.makeText(FavoriteDemo.this, "坐标解析错误", Toast.LENGTH_LONG) .show(); } } /** * 修改收藏点 * * @param v */ public void modifyClick(View v) { mBaiduMap.hideInfoWindow(); // 弹框修改 LayoutInflater mInflater = getLayoutInflater(); mModify = (LinearLayout) mInflater.inflate(R.layout.activity_favorite_alert, null); mdifyName = (EditText) mModify.findViewById(R.id.modifyedittext); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setView(mModify); String oldName = FavoriteManager.getInstance().getFavPoi(currentID).getPoiName(); mdifyName.setText(oldName); builder.setPositiveButton("确认", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String newName = mdifyName.getText().toString(); if (newName != null && !newName.equals("")) { // modify FavoritePoiInfo info = FavoriteManager.getInstance().getFavPoi(currentID); info.poiName(newName); if (FavoriteManager.getInstance().updateFavPoi(currentID, info)) { Toast.makeText(FavoriteDemo.this, "修改成功", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(FavoriteDemo.this, "名称不能为空,修改失败", Toast.LENGTH_LONG).show(); } dialog.dismiss(); } }); builder.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } /** * 删除一个指定点 * * @param v */ public void deleteOneClick(View v) { if (FavoriteManager.getInstance().deleteFavPoi(currentID)) { Toast.makeText(FavoriteDemo.this, "删除点成功", Toast.LENGTH_LONG).show(); if (markers != null) { for (int i = 0; i < markers.size(); i++) { if (markers.get(i).getExtraInfo().getString("id").equals(currentID)) { markers.get(i).remove(); markers.remove(i); mBaiduMap.hideInfoWindow(); break; } } } } else { Toast.makeText(FavoriteDemo.this, "删除点失败", Toast.LENGTH_LONG).show(); } } /** * 获取全部收藏点 * * @param v */ public void getAllClick(View v) { mBaiduMap.clear(); List<FavoritePoiInfo> list = FavoriteManager.getInstance().getAllFavPois(); if (list == null || list.size() == 0) { Toast.makeText(FavoriteDemo.this, "没有收藏点", Toast.LENGTH_LONG).show(); return; } // 绘制在地图 markers.clear(); for (int i = 0; i < list.size(); i++) { MarkerOptions option = new MarkerOptions().icon(bdA).position(list.get(i).getPt()); Bundle b = new Bundle(); b.putString("id", list.get(i).getID()); option.extraInfo(b); markers.add((Marker) mBaiduMap.addOverlay(option)); } } /** * 删除全部点 * * @param v */ public void deleteAllClick(View v) { if (FavoriteManager.getInstance().clearAllFavPois()) { Toast.makeText(FavoriteDemo.this, "全部删除成功", Toast.LENGTH_LONG).show(); mBaiduMap.clear(); mBaiduMap.hideInfoWindow(); } else { Toast.makeText(FavoriteDemo.this, "全部删除失败", Toast.LENGTH_LONG).show(); } } @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() { // 释放收藏夹功能资源 FavoriteManager.getInstance().destroy(); bdA.recycle(); // MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy() mMapView.onDestroy(); mBaiduMap = null; super.onDestroy(); } @Override public void onMapLongClick(LatLng point) { // TODO Auto-generated method stub locationText.setText(String.valueOf(point.latitude) + "," + String.valueOf(point.longitude)); } @Override public boolean onMarkerClick(Marker marker) { mBaiduMap.hideInfoWindow(); // TODO Auto-generated method stub if (marker == null) { return false; } InfoWindow mInfoWindow = new InfoWindow(mPop, marker.getPosition(), -47); mBaiduMap.showInfoWindow(mInfoWindow); MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(marker.getPosition()); mBaiduMap.setMapStatus(update); currentID = marker.getExtraInfo().getString("id"); return true; } @Override public void onMapClick(LatLng point) { // TODO Auto-generated method stub mBaiduMap.hideInfoWindow(); } @Override public boolean onMapPoiClick(MapPoi poi) { // TODO Auto-generated method stub return false; } }