2012-07-21 49 views
2

OnTouchListener没有响应我有以下代码显示在谷歌地图中的实际位置:安卓:在MapView的

public class LocationProjectActivity extends MapActivity implements OnTouchListener { 
private MapController mapController; 
private MapView mapView; 
private LocationManager locationManager; 
private MyOverlays itemizedoverlay; 
private MyLocationOverlay myLocationOverlay; 
private GeoPoint MyPoint; 
public static int longitude; 
public static int latitude; 
private GeoPoint destinationPoint; 

public void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 
    setContentView(R.layout.main); 
    mapView = (MapView) findViewById(R.id.mapview); 
    mapView.setBuiltInZoomControls(true); 
    mapView.setSatellite(true); 
    mapView.computeScroll(); 
    mapController = mapView.getController(); 
    mapController.setZoom(13); 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new GeoUpdateHandler()); 
    myLocationOverlay = new MyLocationOverlay(this, mapView); 
    mapView.getOverlays().add(myLocationOverlay); 
    myLocationOverlay.runOnFirstFix(new Runnable() { 
    public void run() { 
     mapView.getController().animateTo(myLocationOverlay.getMyLocation()); 
    } 
    }); 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    System.out.println("SCREEN WAS CLICKED"); 
    return true; 
} 

我想要做的就是抓时,我触摸屏幕,但方法不会被调用。我已经搜查,发现这一点: OnTouch in map

我都试过了,并且作品是唯一的代码如下:

mapView.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 
    // Your code and remember to return true!   
    return (true); 
    } 
}); 

的问题是,如果我使用此代码,我的MapView失去自然一扔和缩放它已经拥有了,那么我怎么能在我的MapView中拥有一切?

谢谢。

+0

你为什么要touchListner什么样的操作,你会在这里执行?请告诉我 。感谢:) – SALMAN 2012-07-21 19:28:52

+0

我想添加一个图标或东西来指示用户触摸屏幕 – 2012-07-21 20:38:24

回答

1

有可以实现你在找什么及以下的代码两种方式:

@Override 
     public boolean onTap(GeoPoint p, MapView mapView) { 
      Log.d("tap event ", "tap called"); 
      mapOverlays = mapView.getOverlays(); 
      drawable =getResources().getDrawable(R.drawable.marker); 
      itemizedOverlay = new SitesOverlay(drawable); 
      int lat=(int)p.getLatitudeE6(); 
      int lng=(int)p.getLongitudeE6(); 


      GeoPoint point = new GeoPoint(lat,lng); 
      Log.d("tap event ", "tapcalled"+lat+""+lng); 
      OverlayItem overlayitem = new OverlayItem(point, "", ""); 

      items.add(overlayitem); 
      populate(); 
      Log.d("tap event ", "populated"); 
      //  mapOverlays.add(itemizedOverlay); 


      return true; 
     } 

,你可以通过这种方式做到这一点,但这不添加任何覆盖项/销/标记在地图上。

@Override 
public boolean onTouchEvent(MotionEvent event, MapView mapView) 
{ 
    //---when user lifts his finger--- 
    if (event.getAction() == 1) {     
     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; 
}  

这里是链接到教程来检测触摸任何地方在地图上

Detect touch on MapView

为了使标记/销/项目覆盖在地图上,并检测在每个引脚的点击/标记

Detect touch on marker in MapView

我希望这将帮助你:)

谢谢。

+1

,你的意思是onTouch方法???如果没有,我还需要执行什么?另一方面,onTap方法是否需要实现一些接口? – 2012-07-21 21:47:22

+0

@FernandoSantiago我编辑了我的代码,您可以从头开始找到很棒的教程,它们一定会帮助您完成工作。谢谢:)如果我的回答可以帮助你,那么请不要忘记接受我的回答并投票给我,我将非常感谢。 – SALMAN 2012-07-21 22:48:32

0

如果你只是想看看你什么时候触摸屏幕,你仍然可以返回false,这将允许所有其他的拖动和缩放触摸事件工作。

如果您希望单独的触摸事件不能继续其他触摸事件,则只会返回true。

+0

如果我这样做与mapView.setOnTouchListener(新的OnTouchListener() 公共布尔onTouch(视图v,MotionEvent事件).. 。只有第一次的作品,但与工具OnTouchListener方法永远不会奏效 – 2012-07-21 20:26:47

+0

不mapView.setClickable(真)做任何事情 – leenephi 2012-07-21 20:33:22

+0

没有 此代码只能在第一时间: 'mapView.setOnTouchListener(新OnTouchListener() \t { \t public boolean onTouch(View v,MotionEvent event) \t { \t \t System.out。println(“屏幕已被触摸”); \t return false; \t} \t});' – 2012-07-21 20:37:25