2013-10-08 29 views
0

我收到一個奇怪的錯誤。 我想要做的是從mapview中讀取長觸摸座標,並在該座標上添加航點。代碼如下所示:GestureListener僅作出反應第一次

package fragments; 

import java.util.zip.Inflater; 

import org.osmdroid.api.IProjection; 
import org.osmdroid.tileprovider.tilesource.TileSourceFactory; 
import org.osmdroid.util.GeoPoint; 
import org.osmdroid.views.MapController; 
import org.osmdroid.views.MapView; 
import org.osmdroid.views.MapView.Projection; 

import android.content.Intent; 
import android.gesture.GestureLibraries; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.view.ViewGroup; 
import com.gps.gpsclient.DBAccessManager; 
import com.gps.gpsclient.MapDrawer; 
import com.gps.gpsclient.R; 
import android.view.GestureDetector; 


public class MapFragment extends Fragment implements 
GestureDetector.OnGestureListener, 
GestureDetector.OnDoubleTapListener 
{ 
    private MapView view; 
    private MapDrawer mainDrawer; 
    private GestureDetector gestureScanner; 
    private MapController mapController; 

    public MapFragment() 
    {} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
      ViewGroup rootView = (ViewGroup) inflater.inflate(
      R.layout.map_fragment_layout, container, false); 

      view = (MapView) rootView.findViewById(R.id.fragmentMapView); 
      view.setTileSource(TileSourceFactory.MAPNIK); 
      view.setBuiltInZoomControls(true); 
      view.setAlwaysDrawnWithCacheEnabled(true); 
      mapController = view.getController(); 
      mapController.setZoom(10); 
      GeoPoint point2 = new GeoPoint(51496994, -134733); 
      mapController.setCenter(point2); 
      mainDrawer=new MapDrawer(view); 
      gestureScanner=new GestureDetector(view.getContext(),this); 

      view.setOnTouchListener(new OnTouchListener() { 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        gestureScanner.onTouchEvent(event); 
        return false; 

       } 

      }); 





     return rootView; 
    } 
    @Override 
    public void onViewStateRestored(Bundle savedInstance) 
    { 
     super.onViewStateRestored(savedInstance); 
    } 

    @Override 
    public boolean onDoubleTap(MotionEvent arg0) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
    @Override 
    public boolean onDoubleTapEvent(MotionEvent arg0) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
    @Override 
    public boolean onSingleTapConfirmed(MotionEvent e) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
    @Override 
    public boolean onDown(MotionEvent arg0) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
    @Override 
    public void onLongPress(MotionEvent e) 
    { 
     Projection projection=view.getProjection(); 
     float x=e.getX(); 
     float y=e.getY(); 
     GeoPoint point=(GeoPoint)projection.fromPixels(x,y); 
     mainDrawer.addGeopointToMap("test","test_desc",point); 

    } 
    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 
      float distanceY) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
    @Override 
    public void onShowPress(MotionEvent e) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 

的問題是,當我做第一長觸摸,一切都很好,航點增加,但其他時候,它不反應,它不會去onTouch方法

我正在使用osmdroid地圖。

回答

0

如果您想偵測到地圖上點擊長,假設你使用Android版V2,你沒有實現自己的姿勢檢測,而只是實現一個聽者在此間指出,https://developers.google.com/maps/documentation/android/interactivity#map_clicklong_click_events

https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener

+0

問題是,我使用Osmdroid地圖,都不是Google Maps –

+0

好吧,你應該在這個問題指定,請編輯它,所以我們可以幫助你。 – fasteque