android - OnDraw 没有在 MapView 中绘制任何东西

标签 android android-mapview android-canvas osmdroid

我试图在 Canvas 中绘制一个实心绿色矩形,然后将该 Canvas 添加到 MapView。但是,在将“ Canvas ”添加到 MapView 之后,什么也没有出现。我一直在环顾四周,但我无法弄清楚是错的。我正在为 MapView 使用 OSMDroid。

这是类的代码:

公共(public)类 DrawFrameLayout 扩展了 FrameLayout {

      MapView mapView;
GeoPoint geoPoint
Canvas  canvas = new Canvas();
private FrameLayout layout; 

public DrawFrameLayout(Context context, MapView mapView, GeoPoint geoPoint{
    super(context);

    layout = new FrameLayout(context);
    layout.setVisibility(VISIBLE);
    this.mapView = mapView;
    this.geoPoint= geoPoint
    setWillNotDraw(false);
    onDraw(canvas);

    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.gravity = Gravity.NO_GRAVITY;

    addView(layout, params); 
}

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    Paint paint = new Paint();

    // draw a solid green rectangle
    paint.setStyle(Paint.Style.FILL); 
    paint.setColor(Color.GREEN);
    paint.setAntiAlias(true);
    canvas.drawRect(100, 5, 200, 30, paint);
}
}

下面是我如何从主要 Activity 实例化类:

            DrawFrameLayout frameLayout = new DrawFrameLayout(mapView.getContext(), mapView, geoPoint);

        MapView.LayoutParams params = new MapView.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, geoPoint,
        MapView.LayoutParams.BOTTOM_CENTER, 0, 0);
        mapView.addView(frameLayout, params);
        frameLayout.setLayoutParams(params);
        frameLayout.setVisibility(View.VISIBLE);

最佳答案

您需要创建一个叠加层并将其添加到 MapView 的叠加层列表中。示例:

FingerLineOverlay fingerLineOverlay = new FingerLineOverlay();
mapView.getOverlays().add(fingerLineOverlay);

public class FingerLineOverlay extends Overlay{
    private final Paint mPaint;

    public FingerLineOverlay() {
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setStyle(Style.STROKE);
        mPaint.setColor(Color.RED);
    }

    @Override
    public void draw(Canvas c, MapView osmv, boolean shadow) {
        c.drawLine(0, 0, 500, 500, mPaint);
    }
}

更多信息:https://github.com/osmdroid/osmdroid/wiki/Making-Custom-Overlays

关于android - OnDraw 没有在 MapView 中绘制任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9690624/

相关文章:

java - 在 Android MapView 上的两个 GeoPoints 之间绘制路线时出错?

Android - 带有 3 个按钮的 map

java - 实现 AsyncTask 时返回空指针引用

android-animation - 如何通过Android在 Canvas 上以恒定速度缓慢绘制几条线?

android - 如何向 Facebook 好友发送应用邀请(非游戏应用)。?

android - android模拟器启动

android - Ant 不使用 `ant debug install` 重建 Android 应用程序

android - 如何在 MapView 上实现 OnClickListener

android - GridView 在一行中绘制其元素

android - 通过 ComposeView 互操作在 CoordinatorLayout 内编写 LazyColumn 滚动行为