所以我想返回我在地图上触摸的任何点的地理位置,但是我的代码在移动/点击屏幕时没有做任何事情。我是Java和Android的新手,所以我认为这与我在java中缺乏编码知识有关。这是我的代码
package sdpd.loc;
import sdpd.loc.createNote.mapOverlay;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.Toast;
import android.app.Activity;
public class createNote extends MapActivity {
@Override
protected boolean isRouteDisplayed() {
return false;
}
@Override
public void onCreate(Bundle savedInstanceStates){
super.onCreate(savedInstanceStates);
setContentView(R.layout.map);
MapView mapview=(MapView)findViewById(R.id.MapView);
mapview.setBuiltInZoomControls(true);
}
class mapOverlay extends com.google.android.maps.Overlay{
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapview){
if (event.getAction()==1){
GeoPoint p=mapview.getProjection().fromPixels((int)event.getX(), (int)event.getY());
Toast.makeText(getBaseContext(),p.getLatitudeE6()/1E6 + "," + p.getLongitudeE6()/1E6, Toast.LENGTH_SHORT).show();
}
return false;
}
}
}
如何让它发挥作用?
答案 0 :(得分:10)
您没有将自定义覆盖类mapOverlay
(顺便说一句,类名称始终以Java中的大写字母开头)注册到MapView。通过创建类的实例并将其添加到MapView的叠加集合来完成此操作。
您可以通过将以下代码附加到活动的onResume()方法来执行此操作。
public void onCreate(Bundle savedInstanceStates){
super.onCreate(savedInstanceStates);
setContentView(R.layout.map);
MapView mapview=(MapView)findViewById(R.id.MapView);
mapview.setBuiltInZoomControls(true);
mapOverlay myOverlay = new mapOverlay();
List<Overlay> overlays = mMapView.getOverlays();
overlays.add(myOverlay);
}
现在您的叠加层已注册,并且应处理触摸事件。
答案 1 :(得分:3)
public class GoogleMap extends MapActivity {
MapView mapView;
MapController mc;
GeoPoint p;
/** Called when the activity is first created. */
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setStreetView(true);
LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
View zoomView = mapView.getZoomControls();
zoomLayout.addView(zoomView,
new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
mapView.displayZoomControls(true);
mc = mapView.getController();
String coordinates[] = {"23.0504926", "72.528938925"};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));
mc.animateTo(p);
mc.setZoom(17);
//---Add a location marker---
MapOverlay mapOverlay = new MapOverlay();
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
mapView.invalidate();
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
class MapOverlay extends com.google.android.maps.Overlay
{
@Override
public boolean draw(Canvas canvas, MapView mapView,
boolean shadow, long when)
{
super.draw(canvas, mapView, shadow);
//---translate the GeoPoint to screen pixels---
Point screenPts = new Point();
mapView.getProjection().toPixels(p, screenPts);
//---add the marker---
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.marker);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);
return true;
}
****@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{
//---when user lifts his finger---
if (event.getAction() == 1) {
GeoPoint p = mapView.getProjection().fromPixels(
(int) event.getX(),
(int) event.getY());
Geocoder geoCoder = new Geocoder(
getBaseContext(), Locale.getDefault());
try {
List<Address> addresses = geoCoder.getFromLocation(
p.getLatitudeE6() / 1E6,
p.getLongitudeE6() / 1E6, 1);
String add = "";
if (addresses.size() > 0)
{
for (int i=0; i<addresses.get(0).getMaxAddressLineIndex();
i++)
add += addresses.get(0).getAddressLine(i) + "\n";
}
Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show();
}
catch (IOException e) {
e.printStackTrace();
}
return true;
}
else
return false;
}**
}**
}