【发布时间】:2013-06-07 05:22:35
【问题描述】:
我想绘制一个形状,无论用户在哪里触摸地图,都应该动态绘制。我对绘制这些形状一无所知。我怎么能做到这一点?我可以通过画布完成这项工作吗?我正在使用 MapFragment。
请看图片,
请给我任何想法!任何帮助表示赞赏!
【问题讨论】:
-
没人知道吗?请任何人!
标签: google-maps drawing android-maps-v2
我想绘制一个形状,无论用户在哪里触摸地图,都应该动态绘制。我对绘制这些形状一无所知。我怎么能做到这一点?我可以通过画布完成这项工作吗?我正在使用 MapFragment。
请看图片,
请给我任何想法!任何帮助表示赞赏!
【问题讨论】:
标签: google-maps drawing android-maps-v2
您可以通过在地图上添加View 来做到这一点。
Polyline 对象(最初为空),它将成为您的行View上的onTouchEvent
Projection 将 x,y 从事件转换为 LatLng
Polyline
你就完成了。
请注意,这会消耗所有原本会使地图平移或缩放的事件。您必须有其他方式与地图交互或使用某些标志启用消费事件。
【讨论】:
在地图上添加任何按钮,以便将 ImageView 带到前面,并且地图将在背景上可见。 4.点击ImageView时,执行如下操作
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
Point p = new Point();
path = new Path();
float upX;
float upY;
switch (action) {
case MotionEvent.ACTION_DOWN:
laArray = "";
lnArray = "";
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
downx = event.getX();
downy = event.getY();
eventX = downx;
eventY = downy;
Log.d("", "startx" + eventX);
p.x = (int) downx;
p.y = (int) downy;
LatLng latlngpoint;
latlngpoint = map.getProjection().fromScreenLocation(p);
break;
case MotionEvent.ACTION_MOVE:
upx = event.getX();
upy = event.getY();
canvas.drawLine(downx, downy, upx, upy, paint);
drawable.invalidate();
downx = upx;
downy = upy;
Log.d("", "Action_Move");
Log.d("", "downx, downy: " + downx + "," + downy);
Log.d("", "upx, upy: " + upx + "," + upy);
p.x = (int) upx;
p.y = (int) upy;
LatLng latlngpoint1;
latlngpoint1 = map.getProjection().fromScreenLocation(p);
break;
case MotionEvent.ACTION_UP:
upX = event.getX();
upY = event.getY();
p.x = (int) upX;
p.y = (int) upY;
Log.d("", "Action Up");
canvas.drawLine(eventX, eventY, upX, upY, paint);
LatLng latlngpoint2;
latlngpoint2 = map.getProjection().fromScreenLocation(p);
drawable.invalidate();
// When finger is Up, Start UserSearch.
StartUserSearch(); //user defined function
return true;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
return true;
}
像这样添加 ImageView,
<ImageView
android:id="@+id/viewOnMap"
style="@style/AppTheme"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
</ImageView>
所以,当点击地图上的绘制按钮时,
ImageView drawable= (ImageView) findViewById(R.id.viewOnMap);
drawable.setVisibility(View.VISIBLE);
drawable.bringToFront();
现在,您应该可以在 imageView 上绘图,但您似乎是在地图上绘图。
您可以根据需要修改代码。希望这会有所帮助。
【讨论】:
答案是你不能。
如您所见,地图将使用手势进行平移/滚动操作。
但是有一个技巧。
【讨论】: