【问题标题】:android maps disable movementandroid地图禁用移动
【发布时间】:2012-11-24 17:57:13
【问题描述】:

我想用手指在谷歌地图上绘制一个叠加层。 我已经完成了画线.. 但是地图也随着我的手指移动,所以我画得不是很好,因为当地图也移动时,我只能在我的手指周围画一个小圆圈......

我怎样才能禁用地图的移动(拖动)并且仍然能够用我的手指绘制和显示叠加层?

我当前的代码如下所示:

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);
    }

}

【问题讨论】:

  • 这个问题与 Google Maps API V3 无关。 (已删除标签)

标签: android google-maps


【解决方案1】:

处理MotionEvent时需要从onTouchEvent()返回true,不希望被其他人处理。

否则返回 false,事件将由MapView 处理,从而导致地图移动。

问候。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 2011-07-19
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多