2013-10-08 3 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를 사용하는 가정,지도에 긴 클릭을 감지하고 싶은 경우에, 당신은 당신의 자신의 제스처 검출기를 구현 단순히 리스너를 구현할 필요가 없습니다 : 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

문제는 내가 그래서 우리는 당신을 도울 수있는지도를 –

+0

좋아, 당신이 질문을 지정해야, 편집하십시오 구글하지, Osmdroid지도를 사용하고 있다는 점이다. – fasteque

관련 문제