Android集成百度地图点击Mark弹出PopWindow

项目中集成了百度地图,点击Mark弹出PopWindow,效果图如下:


代码如下:

BdMapFragment.java

package com.wdkj.housemanager.fragment;import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
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.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.LogoPosition;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapStatus;
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.MyLocationData;
import com.baidu.mapapi.map.Overlay;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.map.Polyline;
import com.baidu.mapapi.map.PolylineOptions;
import com.baidu.mapapi.model.LatLng;
import com.wdkj.housemanager.R;
import com.wdkj.housemanager.activity.AddpointActivity;
import com.wdkj.housemanager.activity.CreatetaskActivity;
import com.wdkj.housemanager.activity.DisposeActivity;
import com.wdkj.housemanager.activity.HousedetailActivity;
import com.wdkj.housemanager.activity.HousejdActivity;
import com.wdkj.housemanager.activity.HuinfoActivity;
import com.wdkj.housemanager.activity.LoginActivity;
import com.wdkj.housemanager.activity.PatrolRecordActivity;
import com.wdkj.housemanager.activity.UpdateHouseActivity;
import com.wdkj.housemanager.api.AddhouseApi;
import com.wdkj.housemanager.api.AddressApi;
import com.wdkj.housemanager.api.HouseconditionApi;
import com.wdkj.housemanager.api.MarkApi;
import com.wdkj.housemanager.api.PolygonApi;
import com.wdkj.housemanager.api.VillageApi;
import com.wdkj.housemanager.bean.BaseBean;
import com.wdkj.housemanager.bean.Constant;
import com.wdkj.housemanager.bean.HousemarkBean;
import com.wdkj.housemanager.bean.JsonResult;
import com.wdkj.housemanager.bean.RegionPoints;
import com.wdkj.housemanager.bean.RegionpointBean;
import com.wdkj.housemanager.bean.SuccessdEvent;
import com.wdkj.housemanager.bean.VillageBean;
import com.wdkj.housemanager.bean.position;
import com.wdkj.housemanager.util.PointUtils;
import com.wdkj.housemanager.util.PositionUtil;
import com.wdkj.housemanager.util.ProgressDialog;
import com.wdkj.housemanager.util.RetrofitManager;
import com.wdkj.housemanager.util.SPUtils;
import com.wdkj.housemanager.view.Cluster;
import com.wdkj.housemanager.view.ClusterItem;
import com.wdkj.housemanager.view.ClusterManager;
import com.wdkj.housemanager.view.PolyOverlyInfo;import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import butterknife.BindView;
import butterknife.ButterKnife;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;public class BdMapFragment extends Fragment {@BindView(R.id.iv_addhouse)ImageView ivAddhouse;@BindView(R.id.ll_addhouse)LinearLayout llAddhouse;@BindView(R.id.iv_position)ImageView ivPosition;@BindView(R.id.et_search)EditText etSearch;@BindView(R.id.ll_search)LinearLayout llSearch;@BindView(R.id.start)Button start;@BindView(R.id.end)Button end;@BindView(R.id.route)Button route;@BindView(R.id.reset)Button reset;@BindView(R.id.ll_guidelayout)LinearLayout llGuidelayout;private boolean addHouse = false;private LocationClient mLocationClient;public BDLocationListener myListener;private ArrayList polyInfoList = new ArrayList<>();private View view;public static MapView mMapView = null;private List houseMarkList;private static final String TAG = "BdMapFragment";private boolean isFrist = true;private BaiduMap mBaiduMap;private Polyline mPolyline;private double mCurrentLat = 0.0;private double mCurrentLon = 0.0;private int mCurrentDirection = 0;private float mCurrentAccracy;boolean isFirstLoc = true; // 是否首次定位private MyLocationData locData;private InfoWindow mInfoWindow;private LinearLayout baidumap_infowindow;private Marker marker,housemarker;private BitmapDescriptor bitmapred, bitmapblue;private static final int BAIDU_READ_PHONE_STATE =100;private ClusterManager mClusterManager;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {//在使用SDK各组件之前初始化context信息,传入ApplicationContext//注意该方法要再setContentView方法之前实现view = LayoutInflater.from(getActivity()).inflate(R.layout.bdfragment_map, null);baidumap_infowindow = (LinearLayout) LayoutInflater.from(getActivity()).inflate(R.layout.baidumap_infowindow, null);ButterKnife.bind(this, view);mMapView = (MapView) view.findViewById(R.id.mapview);bitmapred = BitmapDescriptorFactory.fromResource(R.drawable.position);mMapView.setLogoPosition(LogoPosition.logoPostionleftTop);mMapView.showZoomControls(false);mBaiduMap = mMapView.getMap();//普通地图mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);// 定义点聚合管理类ClusterManagermClusterManager = new ClusterManager(getActivity(), mBaiduMap);mBaiduMap.setOnMapStatusChangeListener(mClusterManager);// 设置maker点击时的响应mBaiduMap.setOnMarkerClickListener(mClusterManager);mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener() {@Overridepublic boolean onClusterItemClick(MyItem item) {//item数据HousemarkBean houseInfo = item.mhousemarkBean;createInfoWindow(baidumap_infowindow, houseInfo);LatLng ll = PositionUtil.gpstoBd(new LatLng(houseInfo.getY(), houseInfo.getX()));mInfoWindow = new InfoWindow(baidumap_infowindow, ll, -47);//显示InfoWindowmBaiduMap.showInfoWindow(mInfoWindow);return false;}});mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {@Overridepublic void onMapClick(LatLng latLng) {//隐藏InfoWindowif (mInfoWindow != null) {mBaiduMap.hideInfoWindow();mMapView.postInvalidate();}if(addHouse&&getPolyInfo(latLng)!=null){PolyOverlyInfo polyInfo = getPolyInfo(latLng);LatLng downlatlng=PositionUtil.convertBaiduToGPS(latLng);Intent intent = new Intent(getContext(), AddpointActivity.class);intent.putExtra("streetName", polyInfo.getStreetName());intent.putExtra("streetCode", polyInfo.getVillageName());intent.putExtra("streetID", polyInfo.getVillageId());intent.putExtra("lon", downlatlng.longitude);intent.putExtra("lat", downlatlng.latitude);startActivity(intent);}else{return;}}@Overridepublic boolean onMapPoiClick(MapPoi mapPoi) {return false;}});return view;}/*** @param baidumap_infowindow* @param* @Description: 创建 弹出窗口* @Author:王松山* @Since: 2017年5月22日*/private void createInfoWindow(LinearLayout baidumap_infowindow, final HousemarkBean bean) {InfoWindowHolder holder = null;if (baidumap_infowindow.getTag() == null) {holder = new InfoWindowHolder();holder.tv_entname = (TextView) baidumap_infowindow.findViewById(R.id.tv_entname);holder.tv_checkdept = (TextView) baidumap_infowindow.findViewById(R.id.tv_checkdept);holder.tv_checkuser = (TextView) baidumap_infowindow.findViewById(R.id.tv_checkuser);holder.tv_checktime = (TextView) baidumap_infowindow.findViewById(R.id.tv_checktime);holder.tv_dispose = (TextView) baidumap_infowindow.findViewById(R.id.tv_dispose);holder.tv_xcjl = (TextView) baidumap_infowindow.findViewById(R.id.tv_xcjl);holder.tv_huinfo=(TextView) baidumap_infowindow.findViewById(R.id.tv_huinfo);holder.tv_delete=(TextView) baidumap_infowindow.findViewById(R.id.tv_delete);baidumap_infowindow.setTag(holder);}holder = (InfoWindowHolder) baidumap_infowindow.getTag();holder.tv_entname.setOnClickListener(new View.OnClickListener() {//创建任务@Overridepublic void onClick(View v) {Intent intent = new Intent(getContext(), CreatetaskActivity.class);intent.putExtra("houseNum", bean.getBh());startActivity(intent);//隐藏InfoWindowmBaiduMap.hideInfoWindow();}});}public class InfoWindowHolder {public TextView tv_entname;public TextView tv_checkdept;public TextView tv_checkuser,tv_huinfo;public TextView tv_checktime,tv_xcjl,tv_dispose,tv_delete;}@Overridepublic void onDestroyView() {// 退出时销毁定位mLocationClient.stop();// 关闭定位图层mBaiduMap.setMyLocationEnabled(false);mMapView.onDestroy();mMapView = null;super.onDestroyView();}@Overridepublic void onResume() {// MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()mMapView.onResume();super.onResume();}@Overridepublic void onPause() {mMapView.onPause();super.onPause();}/*** @paramgeoPoint当前点击的点* @return当前点击位置所在街道信息*/private PolyOverlyInfo getPolyInfo(LatLng point) {for (PolyOverlyInfo polygonInfo : polyInfoList) {if (PointUtils.IsPointInPolygon(polygonInfo.getPolyline().getPoints(), point)) {return polygonInfo;}}return null;}/*** 每个Marker点,包含Marker点坐标以及图标 将需要的数据通过构造加到Item中*/public class MyItem implements ClusterItem {private  LatLng mPosition;private HousemarkBean mhousemarkBean;public MyItem(LatLng latLng,HousemarkBean housemarkBean) {mPosition = latLng;mhousemarkBean=housemarkBean;}@Overridepublic LatLng getPosition() {return mPosition;}@Overridepublic BitmapDescriptor getBitmapDescriptor() {return BitmapDescriptorFactory.fromResource(R.drawable.position);}}@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic void onDestroy() {super.onDestroy();}}

bdfragment_map.xml

baidumap_infowindow.xml


完成了





本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部