Java 在谷歌地图上画矩形
我在这里扩展了一个包含谷歌地图的SupportMapFragment,我将我的谷歌地图放在一个框架布局上。调用了Ondraw()方法,但问题是矩形从未显示,即使使用setWillNotDraw(false);在这里 我已经得到了矩形的正确位置,唯一的问题是它没有显示。以下是我的大部分代码: 加载项:当我删除谷歌地图时,它会像我预期的那样工作,实际上是背景框架布局上绘制的矩形,因此它将被地图覆盖,现在我解决问题的方法是将图像视图添加为矩形,并在触摸移动时动态更改其大小。目前我不知道如何直接在该视图组(framelayout)的顶部绘制Java 在谷歌地图上画矩形,java,android,touch,overlay,android-framelayout,Java,Android,Touch,Overlay,Android Framelayout,我在这里扩展了一个包含谷歌地图的SupportMapFragment,我将我的谷歌地图放在一个框架布局上。调用了Ondraw()方法,但问题是矩形从未显示,即使使用setWillNotDraw(false);在这里 我已经得到了矩形的正确位置,唯一的问题是它没有显示。以下是我的大部分代码: 加载项:当我删除谷歌地图时,它会像我预期的那样工作,实际上是背景框架布局上绘制的矩形,因此它将被地图覆盖,现在我解决问题的方法是将图像视图添加为矩形,并在触摸移动时动态更改其大小。目前我不知道如何直接在该视图
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
//stash reference to google map
mGoogleMap = getMap();
//show the location
mGoogleMap.setMyLocationEnabled(true);
mTouchView = new TouchableWrapper(getActivity());
mTouchView.addView(view);
return mTouchView;
}
private class TouchableWrapper extends FrameLayout {
//box is used to illustrate the drawing box, the painter is used to set the color of the box.
private Box mCurrentBox = null;
private Paint mBoxPaint;
public TouchableWrapper(Context context) {
super(context);
mBoxPaint = new Paint();
mBoxPaint.setColor(0xffff0000);
// mBoxPaint.setStrokeMiter(20);
mBoxPaint.setStrokeWidth(8);
this.setWillNotDraw(false);
setWillNotDraw(false);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// decide when the child should hold the motion event.
return true; //always let the relative layout to hold the motion event.
}
@Override
public boolean onTouchEvent(MotionEvent event) {
PointF curr = new PointF(event.getX(), event.getY());
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mMapIsTouched = true;
mCurrentBox = new Box(curr);//original code for draw Rectangle.
Log.d(TAG, "action.down box is"+mCurrentBox);
break;
case MotionEvent.ACTION_MOVE:
Log.i(TAG, "action_move");
if (mCurrentBox != null) {
mCurrentBox.setmCurrent(curr);
Log.d(TAG, "action.move box is"+mCurrentBox);
this.invalidate(); //TODO
}
break;
case MotionEvent.ACTION_UP:
Log.i(TAG, "action_up");
mMapIsTouched = false;
mCurrentBox = null;
break;
}
return true;
}
@Override
protected void onDraw(Canvas canvas) {
float left = 0;
float right = 0;
float top = 0;
float bottom = 0;
if (mCurrentBox!=null) {
left = Math.min(mCurrentBox.getmOrigin().x, mCurrentBox.getCurrent().x) ;
right = Math.max(mCurrentBox.getmOrigin().x, mCurrentBox.getCurrent().x) ;
top = Math.min(mCurrentBox.getmOrigin().y, mCurrentBox.getCurrent().y) ;
bottom = Math.max(mCurrentBox.getmOrigin().y, mCurrentBox.getCurrent().y) ;
canvas.drawRect(left, top, right, bottom, mBoxPaint);
}
Log.i(TAG, "value is"+left+right+top+bottom);
}
您可以将地图包装在一个框架布局中,其中还包含一个可绘制的(矩形)。这样,一旦找到矩形的位置,就可以隐藏并显示它,而无需重新绘制
您可以查看一个示例。我不确定,但您可能必须在
onDraw
方法中调用super.onDraw(canvas)
。谢谢您的建议,我检查过了,这可能是一个替代方法