2

Googleマップに指でオーバーレイを描きたい。私はすでに線が描かれていることを達成しました..しかし、地図も指で動くので、地図も動くと指の周りに小さな円を描くことができるので、うまく描くことができません...

マップの移動 (ドラッグ) を無効にしても、指でオーバーレイを描画および表示できるようにするにはどうすればよいですか?

私の現在のコードは次のようになります。

public class OverlayMap extends Overlay {
    private List<MapGeoLine> geoLines = new ArrayList<MapGeoLine>();
    private List<GeoPoint> geoPoints;
    private boolean isTouched = false;

    @Override
    public boolean onTouchEvent(MotionEvent motionEvent, MapView mapView) {

        if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){ 
            geoPoints = new ArrayList<GeoPoint>();
            geoPoints.add(mapView.getProjection().fromPixels((int)motionEvent.getX(),(int)motionEvent.getY()));
            isTouched = true;
        }

        if(motionEvent.getAction() == MotionEvent.ACTION_MOVE){
            if(isTouched){
                geoPoints.add(mapView.getProjection().fromPixels((int)motionEvent.getX(),(int)motionEvent.getY()));
            }
        }

        if(motionEvent.getAction() == MotionEvent.ACTION_UP){
            if(isTouched){
                geoPoints.add(mapView.getProjection().fromPixels((int)motionEvent.getX(),(int)motionEvent.getY()));
            }           
            isTouched = false;
        }   

        return super.onTouchEvent(motionEvent, mapView);
    }

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {  

        if(geoPoints != null && geoPoints.size() > 1 && !isTouched){
            Paint mPaint = new Paint();
            mPaint.setStrokeWidth(2); 
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setAntiAlias(true); 

            Projection projection = mapView.getProjection();

            Point from = new Point();   
            Point to = new Point();
            Path p = new Path();

            projection.toPixels(geoPoints.get(0), from);            

            for(int i = 1; i < geoPoints.size(); i++){          
                projection.toPixels(geoPoints.get(i), to);
                p.moveTo(from.x, from.y);
                p.lineTo(to.x, to.y);
                from.set(to.x, to.y);               
            }  

            canvas.drawPath(p, mPaint);
            mapView.invalidate();
        }

        super.draw(canvas, mapView, shadow);
    }

}
4

1 に答える 1

0

onTouchEvent()を処理するときにtrue を返す必要があり、MotionEvent他の人に処理されたくない場合。

それ以外の場合は false を返し、イベントは によって処理され、MapView結果としてマップが移動します。

よろしく。

于 2012-11-24T18:34:09.477 に答える