百度地图标注物弹出气泡
实现功能:点击标注物,弹出气泡,点击气泡跳转到另一个页面
气泡可以自定义,网上很多都需要draw这个函数,搞得那么复杂,好吧我承认自己水平不高.
overlay_pop.xml:
android:id="@+id/pop_qipao" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/paopao_bg_normal" android:orientation="vertical" android:paddingBottom="20dp" android:paddingLeft="5dp" android:paddingRight="5dp" android:paddingTop="5dp"> android:id="@+id/pop_driver_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:gravity="center_horizontal" android:singleLine="true" android:textColor="#ff646464" android:textSize="16sp"/> android:id="@+id/pop_xingji" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/grade" android:gravity="center_horizontal" android:src="@drawable/star5"/>
MapActivity:
// 标注物资源
private Drawable driverMarker = null;
privateint lat;
privateint lon;
private View popView;// 气泡
privateint x;
privateint y;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
driverMarker = getResources().getDrawable(R.drawable.paopao);
// 初始化view
initView();
}
privatevoid initView() {
// 地图view
mapview = (MapView) findViewById(R.id.bmapView);
mapview.setClickable(true);
mapview.setBuiltInZoomControls(true);
// 地图控制器
mapController = mapview.getController();
GeoPoint point = new GeoPoint((int) (lat* 1e6), (int) (lon* 1e6));
// 设置地图中心点
mapController.setCenter(point);
mapController.setZoom(zoomLevel);
mapController.enableClick(true);
// 地图监听器
mapListener = new MKMapViewListener() {
@Override
publicvoid onMapMoveFinish() {
Log.i("data", "onMapMoveFinish");
// 用于监听,zoom级别是否发生改变
ZoomLevelLisenter();
}
@Override
publicvoid onMapAnimationFinish() {
Log.i("data", "onMapAnimationFinish");
// 用于监听,zoom级别是否发生改变
ZoomLevelLisenter();
}
@Override
publicvoid onGetCurrentMap(Bitmap arg0) {
}
@Override
publicvoid onClickMapPoi(MapPoi arg0) {
}
};
mapview.regMapViewListener(app.mBMapManager, mapListener);
// 自己标注物
myLocationOverlay = new MyLocationOverlay(mapview);
myLocationOverlay.enableCompass();
mapview.getOverlays().add(myLocationOverlay);
// 司机标注物
driverOverlay = new DriverOverlay(driverMarker, TabMapActivity.this);
mapview.getOverlays().add(driverOverlay);
//x,y为了控制气泡出现在标注物的位置
x = driverMarker.getIntrinsicHeight();
y = driverMarker.getIntrinsicWidth();
//加载气泡上的布局
popView = getLayoutInflater().inflate(https://www.doczj.com/doc/3e3298672.html,yout.overlay_pop, null);
mapview.addView(popView, new https://www.doczj.com/doc/3e3298672.html,youtParams(
https://www.doczj.com/doc/3e3298672.html,youtParams.WRAP_CONTENT,
https://www.doczj.com/doc/3e3298672.html,youtParams.WRAP_CONTENT, 0, -x,
https://www.doczj.com/doc/3e3298672.html,youtParams.BOTTOM_CENTER));
popView.setVisibility(View.GONE);
}
/**
* 司机图层
*/
privateclass DriverOverlay extends ItemizedOverlay
public List
new ArrayList
private Context mContext = null;
private PopupOverlay pop = null;
private Toast mToast = null;
public DriverOverlay(Drawable marker, Context context) { super(marker);
this.mContext = context;
pop = new PopupOverlay(mapview, new PopupClickListener() {
@Override
publicvoid onClickedPopup(int index) {
if (null == mToast)
mToast = Toast.makeText(mContext, "popup item :"
+ index + " is clicked.",
Toast.LENGTH_SHORT);
else
mToast.setText("popup item :" + index + " is clicked.");
mToast.show();
}
});
populate();
}
/**
* 标注物单击事件
*/
protectedboolean onTap(finalint index) {
// Toast.makeText(mContext, "你点击了" +
// mGeoList.get(index).getSnippet(),
// Toast.LENGTH_LONG).show();
final List
mapview.updateViewLayout(popView,
new https://www.doczj.com/doc/3e3298672.html,youtParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,
mGeoList.get(index).getPoint(), 0, -x,
https://www.doczj.com/doc/3e3298672.html,youtParams.BOTTOM_CENTER));
popView.setVisibility(View.VISIBLE);
RelativeLayoutpop_qipaoLinearLayout = (RelativeLayout) popView
.findViewById(R.id.pop_qipao);
TextViewpopView_driver_name = (TextView) popView
.findViewById(R.id.pop_driver_name);
TextViewpopView_qrcode = (TextView) popView
.findViewById(R.id.pop_qrcode);
ImageViewpop_driver_image=(ImageView)
findViewById(R.id.pop_driver_image);
String pop_driver_name = drivers.get(index).getName();
String pop_qrcode = drivers.get(index).getQrcode();
byte[] imageText = drivers.get(index).getImageText();
if (null != imageText) {
String url =
ImageHelper.base64StringToImage(imageText, pop_qrcode);
if (null != url&& !"".equals(url)) {
Uri uri = Uri.parse(url);
pop_driver_image.setImageURI(uri);
}
}
popView_driver_name.setText(pop_driver_name);
popView_qrcode.setText(pop_qrcode);
pop_qipaoLinearLayout.setOnClickListener(new OnClickListener () {
//这里是点击跳转
@Override
publicvoid onClick(View v) {
Intent intent = new Intent(mContext, DriverDetails.class);
HubObject.getInstance().setDriverBean(drivers.get(index));
mContext.startActivity(intent);
}
});
returnfalse;
}
publicboolean onTap(GeoPointpt, MapViewmapView) { if (pop != null) {
pop.hidePop();
}
if (popView != null) {
popView.setVisibility(View.GONE);
}
super.onTap(pt, mapView);
returnfalse;
}
@Override
protected OverlayItemcreateItem(int i) {
return mGeoList.get(i);
}
@Override
publicint size() {
return mGeoList.size();
}
publicvoid addItem(OverlayItem item) {
mGeoList.add(item);
populate();
}
publicvoid removeItems() {
mGeoList.clear();
populate();
}
}