我正在为Android开发一款地图应用程序,使用的是Google Maps Android API V2。我从Web服务获取多边形数据,通过XML解析将其转换后可以在地图上显示,没有问题。但是,有没有办法在用户触摸任何多边形时打开类似弹出窗口的东西呢?或者,如果用户想改变所选多边形的坐标怎么办?我看到了很多例子,但它们都是用JavaScript完成的,或者使用不同的第三方工具。有没有人有什么建议?谢谢。
我正在为Android开发一款地图应用程序,使用的是Google Maps Android API V2。我从Web服务获取多边形数据,通过XML解析将其转换后可以在地图上显示,没有问题。但是,有没有办法在用户触摸任何多边形时打开类似弹出窗口的东西呢?或者,如果用户想改变所选多边形的坐标怎么办?我看到了很多例子,但它们都是用JavaScript完成的,或者使用不同的第三方工具。有没有人有什么建议?谢谢。
public class MySupportMapFragment extends SupportMapFragment {
private View mOriginalContentView;
private TouchableWrapper mTouchView;
private BasicMapActivity mActivity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = (BasicMapActivity) getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent,
Bundle savedInstanceState) {
mOriginalContentView = super.onCreateView(inflater, parent,
savedInstanceState);
mTouchView = new TouchableWrapper();
mTouchView.addView(mOriginalContentView);
return mTouchView;
}
@Override
public View getView() {
return mOriginalContentView;
}
class TouchableWrapper extends FrameLayout {
public TouchableWrapper() {
super(mActivity);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_UP: {
int x = (int) event.getX();
int y = (int) event.getY();
mActivity.tapEvent(x,y);
break;
}
}
return super.dispatchTouchEvent(event);
}
}
}
BasicMapActivity:
public void tapEvent(int x, int y) {
Log.d(TAG,String.format("tap event x=%d y=%d",x,y));
if(!isEditMode()) {
Projection pp = mMap.getProjection();
LatLng point = pp.fromScreenLocation(new Point(x, y));
for (Shape ss : mPolygons) {
if(ss.isPointInPolygon(point)) {
ss.mMarkers.get(0).marker.showInfoWindow();
}
}
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
}
布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="au.com.datalink.plugins.MySupportMapFragment" />
</RelativeLayout>
你所要处理的是onMapClickListener,它返回按下位置的经纬度。
public abstract void onMapClick (LatLng point)
当用户在地图上进行轻触手势时调用此方法,但仅当地图的覆盖层都未处理该手势时才调用。此方法的实现始终在主线程上调用。 参数 point 被轻触的地面上的点(从屏幕点投影而来)。
然后检查latlng是否在多边形内。
我有点拼凑出来了,但好消息是lat和lng已经是双精度浮点数了。 祝你好运!