【问题标题】:OnDraw is not drawing anything into MapViewOnDraw 没有在 MapView 中绘制任何内容
【发布时间】:2012-03-13 19:22:30
【问题描述】:

我正在尝试在画布中绘制一个纯绿色矩形,然后将该画布添加到 MapView。但是,在将“画布”添加到 MapView 之后,其中没有任何内容。我一直在环顾四周,但我无法弄清楚是错的。我正在为 MapView 使用 OSMDroid。

这是该类的代码:

公共类 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);
}
}

这是我从主要活动中实例化类的方式:

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

【问题讨论】:

    标签: android android-mapview android-canvas osmdroid


    【解决方案1】:

    您需要创建一个叠加层并将其添加到 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

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 2012-01-02
      相关资源
      最近更新 更多