我试图在画布中绘制一个纯绿色矩形,然后将该画布添加到MapView。但是,在向MapView添加“画布”后,没有任何内容出现在其中。我一直在四处寻找,但我无法弄清楚是不是错了。我正在使用OSMDroid作为MapView。
以下是该类的代码:
公共类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);
答案 0 :(得分:0)
您需要创建一个叠加层并将其添加到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