现需要实现这样的功能:将给定的多个定位点进行连接,让其形成一条路线;点击每个定位点出现该点的基本信息。百度地图有现成的路线覆盖物,但现有的路线(公交、驾车、步行)都只是起点到终点,不能经过多点。只需要继承ItemizedOverlay类,实现其draw、ontap方法:
@Override
public void draw(Canvas canvas, MapView mapView,boolean shadow) {
super.draw(canvas, mapView,shadow);
//Projection接口用于屏幕像素点坐标系统和地球表面经纬度点坐标系统之间的变换
Projection projection =mapView.getProjection();
// 遍历所有的OverlayItem
for (int index = this.size() -1; index >0; index--) {
//得到给定索引及后一个的item
OverlayItemoverLayItemstart = getItem(index);
OverlayItemoverLayItemstop = getItem(index-1);
//把经纬度变换到相对于MapView左上角的屏幕像素坐标
Pointpointfrom = projection.toPixels(overLayItemstart.getPoint(),null);
Point pointto= projection.toPixels(overLayItemstop.getPoint(), null);
PaintpaintLine=new Paint();
paintLine.setColor(Color.BLUE);
paintLine.setStrokeWidth(5);
canvas.drawLine(pointfrom.x,pointfrom.y, pointto.x, pointto.y, paintLine);//两点之间画直线
}
Paint paintText = newPaint();
paintText.setColor(Color.BLUE);
paintText.setTextSize(15);
Point pointFirst =projection.toPixels(getItem(0).getPoint(), null);//路线的起点
Point pointLast =projection.toPixels(getItem(this.size() - 1).getPoint(),null);//路线的终点
canvas.drawText("起点",pointFirst.x, pointFirst.y, paintText);//添加起点终点标记
canvas.drawText("终点",pointLast.x, pointLast.y, paintText);
}
另外,实现onTab方法,实现定位点的点击操作,
@Override
protected boolean onTap(int i) {
// 处理当点击事件
setFocus(mGeoList.get(i));
GeoPoint pt =mGeoList.get(i).getPoint();
baiduMap.updateViewLayout(popView,
newMapView.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,pt,
MapView.LayoutParams.BOTTOM_CENTER));
mContext.popView.setVisibility(View.VISIBLE);
TextView TITLE =(TextView) findViewById(R.id.text_title);
TITLE.setText("这是第"+i+"个定位点");
// 关闭信息
ImageView imageView =(ImageView) findViewById(R.id.ima_close);
imageView.setOnClickListener(newView.OnClickListener() {
public voidonClick(View v) {
popView.setVisibility(View.GONE);
}
});
return true;
}
注:baiduMap是MapView控件,popView是点击后弹出信息的布局页面;popView布局代码如下:
http://schemas.android.com/apk/res/android"
android:background="@drawable/info_bubble"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20px"
android:paddingTop="10px"
android:paddingRight="20px"
android:paddingBottom="30px"
>
android:ellipsize="marquee"
android:layout_width="120px"
android:layout_height="wrap_content"
android:singleLine="true" />
android:background="@drawable/close"
android:layout_width="30px"
android:layout_toRightOf="@id/text_title"
android:layout_height="wrap_content" />
效果如下图:
最后,虽然不是很好看,但是是我要的功能就行了