2013-10-08 1 views
0

Я получаю одну странную ошибку. Что я хочу сделать, это прочитать длинные координаты касания от mapview и добавить Waypoint в эти координаты. Код выглядит следующим образом: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

Если вы хотите, чтобы обнаружить длинные клики на карте, предполагая, что вы используете v2 для Android, вы не должны реализовать свой собственный детектор жест, но просто реализовать слушатель, как указывал здесь: 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

Ok, вы должны указать его в этом вопросе, пожалуйста, измените его так, мы можем помочь вам. – fasteque

Смежные вопросы