mapOverlays = mapView.getOverlays();Drawable drawable = this.getResources().getDrawable(R.drawable.icon);
CustomItemizedOverlay itemizedOverlay =
new CustomItemizedOverlay(drawable, this);
GeoPoint point = new GeoPoint(latitudeE6, longitudeE6);
OverlayItem overlayitem =
new OverlayItem(point, \"Hello\", \"I'm in Athens, Greece!\");
itemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedOverlay);
MapController mapController = mapView.getController();
mapController.animateTo(point);
mapController.setZoom(6);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
在上面的代码中,我们实例化了CustomItemizedOverlay类,并为其构造函数传入了Android默认的Drawable类的实例进行初始化,接下来,我们用一个预先定义好的经纬度去实例化一个GeoPoint类,GeoPoint类表示一个具体的位置。然后再用这个geopoint类的实例去初始化OverlayItem对象的实例,并且传入一段文本,这样就产生了一个完整的地图上的标记了,最后把这个标记加入到图层中去,这是通过调用CustomItemizedOverlay类的addOverlay去实现的,最后该标记就会出现在地图上了。
最后,我们调用了MapController这个工具类去控制地图的缩放,将地图缩放到由
GeoPoint类的实例指定区域的位置(使用的是animateTo方法),并用setZoom()方法指定了放大的级别。
运行程序后,可以看到在地图上只显示了指定区域大小的地图,并且看到了标记,当你点击标记时,可以看到弹出的对话框和显示的文字。
▲
总结
其实Android 搭配Google Map还能实现很多功能,比如GPS导航,结合SNS实现提供各类的LBS位置服务等,本文只是带领你初窥了Android 搭配Google Map的强大功能,更多的还有待读者去实践发现。
、
ndroid中Google地图标记(Marker) - [编码人生]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://westyi.blogbus.com/logs/69324000.html
同Polyline一样,地图标记Marker依旧没有出现在Android中的Map API中。自己动手实现了一个极其简单的Marker类,别的不多述,直接上代码。
package com.blogbus.westyi.overlay;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Point;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;
/**
* 地图标记层
*
* @author westyi
*
*/
public class Marker extends Overlay {
private GeoPoint point = null;// 要插入标记的经纬度位置
private Bitmap bmp = null; // 标记使用的图标
private Point deviation = null; // 图标绘制偏移量
/**
* 指定GeoPoint,图标Bitmap及图标偏移量Point构造Marker.
*
* @param point
* 放置图标的GeoPoint
* @param bmp
* 图标Bitmap
* @param deviation
* 图标位置偏移量,canvas画图从左向右,从上到下计算坐标,所以偏移值一般是负值
*/
public Marker(GeoPoint point, Bitmap bmp, Point deviation) {
this.point = point;
this.bmp = bmp;
this.deviation = deviation;
}
/**
* 绘制图标,注意图标位置偏移量及地图坐标转换
*/
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
if (!shadow) {// 不是绘制shadow层
Projection projection = mapView.getProjection();
if (point != null && bmp != null) {
Point pos = projection.toPixels(point, null);
//需要添加偏移量
canvas.drawBitmap(bmp, pos.x + deviation.x, pos.y + deviation.y, null);
}
}
}
}
使用示例如下,该段代码在继承于MapActivity的类中:
Bitmap bmp =
BitmapFactory.decodeResource(getResources(),R.drawable.marker);
Point deviation = new Point(-15,-36);
Marker marker = new Marker(point,bmp,deviation);
map.getOverlays().add(marker); //map是MapView类型
看看效果: