package com.didi.es.map.base;
import android.util.Log;
import android.view.View;
import com.tencent.tencentmap.mapsdk.maps.TencentMap.InfoWindowAdapter;
import com.tencent.tencentmap.mapsdk.maps.TencentMap.OnInfoWindowClickListener;
import com.tencent.tencentmap.mapsdk.maps.TencentMap.OnMarkerClickListener;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.Marker;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
/**
* 标记类基类,提供默认的事件并建立和info window的关联
*
* @author houshengyong
* @since 2015-5-25
*/
public class EsMarkerBase implements OnMarkerClickListener, OnInfoWindowClickListener, InfoWindowAdapter {
private static final String TAG = EsMarkerBase.class.getSimpleName();
protected Marker mMarker;
protected EsMapView mMapView;
/**
* 构造一个标记并添加到地图上,并默认注册了标记点击事件
*
* @param mapView
* @param iconId
* @param lat
* @param lng
*/
public EsMarkerBase(EsMapView mapView, int iconId, double lat, double lng) {
mMapView = mapView;
MarkerOptions markeroptions = new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(iconId)).position(new LatLng(lat, lng));
mMarker = mapView.getMap().addMarker(markeroptions);
mapView.getEventHub().registerOnMarkerClickListener(mMarker, this);
mapView.getEventHub().registerOnInfoWindowClickListener(mMarker, this);
}
/**
* 将标记从地图中移除,同时取消必要的事件监听
*/
public void removeFromMap() {
mMapView.getEventHub().unregisterOnMarkerClickListener(mMarker, this);
mMapView.getEventHub().unregisterOnInfoWindowClickListener(mMarker, this);
mMarker.remove();
};
/**
* 实现自定义的info window相关接口,自定义info window适配器由子类返回
*/
public void setWindowAdaper() {
mMapView.getMap().setInfoWindowAdapter(this);
}
/**
* 设置是否可以点击
*/
public void setClickable(boolean clickable) {
mMarker.setClickable(clickable);
}
/**
* 显示info window
*/
public void showInfoWindow() {
// 首先尝试加载本标记自定义info window
setWindowAdaper();
mMarker.showInfoWindow();
}
/**
* 隐藏info window
*/
public void hideInfoWindow() {
mMarker.hideInfoWindow();
}
/**
* 标记的点击事件,默认在点击时弹出自定义的info window,可由子类重写
*/
@Override
public boolean onMarkerClick(Marker marker) {
Log.i(TAG, "EsMarkerBase, onMarkerClick, marker=" + marker.getId());
showInfoWindow();
return false;
}
/**
* 标记对应的window info点击事件onInfoWindowClick,可由子类重写
*/
@Override
public void onInfoWindowClick(Marker marker) {
Log.i(TAG, "EsMarkerBase, onInfoWindowClick, marker=" + marker.getId());
}
/**
* 标记对应的window info点击事件onInfoWindowClickLocation,可由子类重写
*/
@Override
public void onInfoWindowClickLocation(int width, int height, int x, int y) {
Log.i(TAG, "EsMarkerBase, onInfoWindowClick, width =" + width);
Log.i(TAG, "EsMarkerBase, onInfoWindowClick, height=" + height);
Log.i(TAG, "EsMarkerBase, onInfoWindowClick, x=" + x);
Log.i(TAG, "EsMarkerBase, onInfoWindowClick, y=" + y);
}
/*
* (non-Javadoc)
*
* @see
* com.tencent.tencentmap.mapsdk.maps.TencentMap.InfoWindowAdapter#getInfoContents(com.tencent
* .tencentmap.mapsdk.maps.model.Marker)
*/
@Override
public final View getInfoContents(Marker arg0) {
return null;
}
/*
* (non-Javadoc)
*
* @see
* com.tencent.tencentmap.mapsdk.maps.TencentMap.InfoWindowAdapter#getInfoWindow(com.tencent
* .tencentmap.mapsdk.maps.model.Marker)
*/
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
/*
* (non-Javadoc)
*
* @see
* com.tencent.tencentmap.mapsdk.maps.TencentMap.InfoWindowAdapter#getInfoWindowPressState(com
* .tencent.tencentmap.mapsdk.maps.model.Marker)
*/
@Override
public View getInfoWindowPressState(Marker arg0) {
return null;
}
}