将触摸事件监听器添加到MapView

9

我想返回我在地图上触摸的任何点的地理位置,但我的代码在移动/点击屏幕时没有任何反应。我对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;
    }
}

我该如何使它工作?

1个回答

10

您没有将自定义的Overlay类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
谢谢!我是Java的新手,所以经常犯错误。 - Achint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接