Android MapActivity&ItemizedOverlay更改当前位置onTouchEvent
问题描述:
我有一个应用程序,其中一个活动显示地图和另一个用于在Map上放置标记或任何叠加项目的类。 它工作的很好,但现在当用户触摸地图时,它会显示带有新位置的消息(此代码在AddItemizedOverlay的ontouche事件上实现)。Android MapActivity&ItemizedOverlay更改当前位置onTouchEvent
我想改变地图上针对新位置(主要活动中的代码)的销。 如何将新的位置数据从AddItemizedOverlay类传递到主要活动?我如何绘制新的用户位置? 谢谢!
myMapactivity.java
public class myMapactivity extends MapActivity
{
private MapView mapView;
private MapController mapCtrl;
List<Overlay> mapOverlays;
GeoPoint mePoint;
AddItemizedOverlay itemizedOverlay;
OverlayItem overlayitem;
public void onCreate(Bundle savedInstanceState)
{
...
mapView = (MapView) findViewById(R.id.mapview);
mapView.setSatellite(false);
mapView.setBuiltInZoomControls(true);
mapOverlays = mapView.getOverlays();
mapOverlays.clear();
mapCtrl = mapView.getController();
drawCurrentUserLocation();
}
private void drawCurrentUserLocation()
{
// Drawable marker icon
Drawable drawable_user = this.getResources()
.getDrawable(R.drawable.mark_red);
itemizedOverlay = new AddItemizedOverlay(drawable_user, this);
overlayitem = new OverlayItem(mePoint, "Your Location","That is you!");
itemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedOverlay);
itemizedOverlay.populateNow();
mapCtrl.animateTo(mePoint);
mapCtrl.setZoom(17);
}
}
AddItemizedOverlay.java
public class AddItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();
private Context context;
public AddItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
public AddItemizedOverlay(Drawable defaultMarker, Context context) {
this(defaultMarker);
this.context = context;
}
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{
if (event.getAction() == 1) {
GeoPoint geopoint = mapView.getProjection().fromPixels(
(int) event.getX(),
(int) event.getY());
// latitude
double lat = geopoint.getLatitudeE6()/1E6;
// longitude
double lon = geopoint.getLongitudeE6()/1E6;
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
String result = null;
try {
List<Address> list = geocoder.getFromLocation(lat, lon, 1);
if (list != null && list.size() > 0) {
Address address = list.get(0);
// sending back first address line and locality
result = address.getAddressLine(0) + ", " + address.getLocality();
Toast.makeText(context, result, Toast.LENGTH_SHORT).show();
}
} catch (IOException e) {
Log.e("Error", "Impossible to connect to Geocoder", e);
}
}
return false;
}
答
由于myMapactivity是AddItemizedOverlay的背景下,你可以使用:
在AddItemizedOverlay ((myMapactivity)context).setMarker(event)
;这将调用应该在myMapactivity中实现的公共方法setMarker(MotionEvent事件)。
+0
谢谢坦米尔。我是Android的新手,所以我希望这不是一个大的请求,但是请给我一个简单的myMapActivity方法示例,或者可以给我一个链接,让我可以阅读更多关于它的内容?非常感谢,戴夫 –
你需要更清楚你想要达到的目标。 – Luis