1

Mapsforge lib 0.30 を Android で動作させることができ、とても満足しています。私が抱えている問題は、適切な方法でカスタム ドローアブルを追加できないことです。描画するドローアブルを追加すると、ドローアブルが正しい位置に表示されず、画面の左上隅に表示されます。これは私のテストコードの例です:

MapView mapView = new MapView(this);
mapView.setClickable(true);
mapView.setBuiltInZoomControls(true);
mapView.setEnabled(true);
mapView.setMapFile(new File("/sdcard/remob/netherlands.map"));

setContentView(mapView);

// Creating my own custom drawable
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bmp = Bitmap.createBitmap(60, 60, conf);
Drawable drawable = new BitmapDrawable(getResources(), bmp) {
@Override
public void draw(Canvas canvas) {
    super.draw(canvas);

    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.BLUE);
    paint.setStyle(Style.FILL);

    canvas.drawCircle(30, 30, 15, paint);
}
};

// create an ItemizedOverlay with the default marker
ArrayItemizedOverlay itemizedOverlay = new ArrayItemizedOverlay(drawable);

// create a GeoPoint with the latitude and longitude coordinates
GeoPoint geoPoint = new GeoPoint(51.92434, 4.47769);

// create an OverlayItem with title and description
OverlayItem item = new OverlayItem(geoPoint, "MyPoint", "This is my own point.");
item.setMarker(ItemizedOverlay.boundCenter(drawable));

// add the OverlayItem to the ArrayItemizedOverlay
itemizedOverlay.addItem(item);

// add the ArrayItemizedOverlay to the MapView
mapView.getOverlays().add(itemizedOverlay);

それで、誰かが私が正しい方法でそれを行うのを手伝ってもらえますか? つまり、実行時にドローアブルを作成し、正しい位置に配置したいと考えています。リソースからドローアブルを追加するだけでは問題ありません。それはうまく機能していますが、実行時から、ドローアブルは正しい位置にありません。ありがとうございました。

4

1 に答える 1

1

その上で Marker.boundCenter(...) を呼び出す必要があります。

私は次のような行を使用します:

ef_icon = Marker.boundCenter(getResources().getDrawable(R.drawable.ef_icon));

私はトランクから作業しています (Maven への 0.3.1 スナップショットのように見えます)。

その方法が Mapsforge のバージョンにない場合、完全な方法は次のとおりです。

public static Drawable boundCenter(Drawable drawable) {
    int intrinsicWidth = drawable.getIntrinsicWidth();
    int intrinsicHeight = drawable.getIntrinsicHeight();
    drawable.setBounds(intrinsicWidth / -2, intrinsicHeight / -2, intrinsicWidth / 2, intrinsicHeight / 2);
    return drawable;
}
于 2012-09-18T12:39:32.503 に答える