0

私は次のコードを持っています:

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();

そしてキャンバスで自作のマーカーを作りたいのですが、今のところ静止画像を使っていますが、円や線などで自作のフォームを作りたい... 可能だと思いますが見つかりませんそれを機能させる方法。

どんな助けでも大歓迎です

4

2 に答える 2

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();
于 2012-04-19T14:58:18.603 に答える
0

私の答えは少し遅れていますが、osmdroidを使用して他の多くの問題に苦労しています。独自のマーカーを使用する場合は、最初にビットマップ内で使用し、OverlayItem.setMarker()メソッドで描画可能なマーカーとして設定します。

独自のマーカーを描画するためにItemizedIconOverlay.draw()メソッドをオーバーライドする場合は、OnItemGestureListenerを使用するタッチスクリーンジェスチャについても、ItemizedIconOverlayのホットスポットロジックを更新する必要があります。

Canvasを使用してビットマップを作成するには、

Bitmap bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
// Draw on your canvas...

次に、ビットマップを割り当ててみてください。

overlayItem.setMarker(new BitmapDrawable(bitmap));
于 2012-12-11T01:07:56.807 に答える