하나의 이상한 오류가 발생합니다. 내가 원하는 것은 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 맵을 사용 중입니다. 여기에 지적
문제는 내가 그래서 우리는 당신을 도울 수있는지도를 –
좋아, 당신이 질문을 지정해야, 편집하십시오 구글하지, Osmdroid지도를 사용하고 있다는 점이다. – fasteque