0

奇妙なエラーが 1 つ発生します。私がやりたいことは、マップビューからロングタッチ座標を読み取り、その座標にウェイポイントを追加することです。コードは次のようになります。

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マップを使用しています。

4

1 に答える 1

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

于 2013-10-08T20:19:54.123 に答える