gpt4 book ai didi

android - 如何使用 Mapsforge 在运行时正确添加可绘制对象

转载 作者:行者123 更新时间:2023-11-30 04:03:02 30 4
gpt4 key购买 nike

我可以让 Mapsforge lib 0.30 在 Android 上运行,我真的很满意。我遇到的问题是我无法以正确的方式添加自定义可绘制对象。当我添加要绘制的 drawable 时,drawable 没有显示在正确的位置,而是显示在屏幕的左上角。这是我的测试代码示例:

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

那么谁能帮助我以正确的方式做到这一点?简而言之,我想在运行时创建一个可绘制对象并将其放在正确的位置。仅从资源中添加可绘制对象不是问题,效果很好,但从运行时来看,可绘制对象不在正确的位置。谢谢。

最佳答案

您需要对其调用 Marker.boundCenter(...)。

我使用如下一行:

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

我在 Trunk 上工作(看起来像 Maven 的 0.3.1-snapshot)。

如果您的 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;
}

关于android - 如何使用 Mapsforge 在运行时正确添加可绘制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12192123/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com