我有以下代码:
ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
GeoPoint geoPoint = new GeoPoint(data.getPosition().longitude, data.getPosition().latitude, data.getPosition().altitude);
OverlayItem overlayItem = new OverlayItem(placeName, description, geoPoint);
overlayItem.setMarker(this.getResources().getDrawable(R.drawable.ic_launcher));
items.add(overlayItem);
overlay = new ItemizedOverlayWithFocus<OverlayItem>(this.getApplicationContext(), items,
new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
@Override
public boolean onItemSingleTapUp(final int index, final OverlayItem item) {
return true; // We 'handled' this event.
}
@Override
public boolean onItemLongPress(final int index, final OverlayItem item) {
return false;
}
});
mapView.getOverlays().set(0,overlay);
mapView.invalidate();
我想用画布创建自己的标记,现在,我正在使用静态图像,但我想创建自己的圆形,线条,... 我认为这是可能的,但我找不到如何让它发挥作用。
任何帮助将不胜感激
答案 0 :(得分:1)
我找到了解决问题的一部分的解决方案。 我创建了一个从SimpleLocationOverlay扩展的类,然后我重写draw()方法并执行canvas.drawLine,drawCircle ... 但是现在我使用SimpleLocationOverlay类型,我再也无法使用ItemizedOverlayWithFocus,所以我的问题是,如何用我现在使用的替换它?
对于那些对我的解决方案感兴趣的人,以及那些想要帮助我的人,代码看起来像这样:
public class MyOverlay extends SimpleLocationOverlay{
private MyCar myCar = new MyCar();
private GeoPoint geoPosition = new GeoPoint(0, 0);
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
public myOverlay(Context ctx) {
super(ctx);
// TODO Auto-generated constructor stub
}
public myOverlay(Context ctx, MyCar _myCar) {
super(ctx);
this.myCar= _myCar;
this.paint.setAntiAlias(true);
...
}
@Override
public void draw(Canvas c, MapView osmv, boolean shadow) {
Point mapCenterPoint = new Point();
osmv.getProjection().toPixels(this.geoPosition, mapCenterPoint);
c.drawCircle(mapCenterPoint.x, mapCenterPoint.y, 10, this.paint);
}
}
以及我如何在我的活动中使用它:
ArrayList<MyOverlay> items = new ArrayList<MyOverlay>();
int i;
GeoPoint geoPoint = null;
MyOverlay myOverlay;
mapView.getOverlays().clear();
for (i = 0; i < listeCar.size(); i++) {
geoPoint = new GeoPoint(listeCar.get(i).getPosition().longitude, listeCar.get(i).getPosition().latitude, listeCar.get(i).getPosition().altitude);
myOverlay= new myOverlay(getApplicationContext(),listeCar.get(i), mapView);
myOverlay.setLocation(geoPoint);
myOverlay.draw(new Canvas(), mapView, false);
items.add(myOverlay);
}
mapView.getOverlays().addAll(0, items );
items.clear();
答案 1 :(得分:0)
我的回答有点晚了,但我一直在努力解决这个使用osmdroid的其他一些问题。如果您想使用自己的标记,请先在Bitmap中进行,然后在OverlayItem.setMarker()方法中将其设置为Drawable Marker。
如果您覆盖ItemizedIconOverlay.draw()方法来绘制自己的标记,则必须更新ItemizedIconOverlay的Hotspot逻辑以及使用OnItemGestureListener的任何触摸屏手势。
要使用Canvas创建位图,请尝试
Bitmap bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
// Draw on your canvas...
然后尝试分配位图:
overlayItem.setMarker(new BitmapDrawable(bitmap));