在MapFragment上正确绘制圆形图

时间:2015-09-27 23:09:45

标签: android mapfragment

我正在开发一款应该允许用户在地图上绘制圆圈的应用。

我已使用this问题的答案,允许用户使用此触控侦听器拖出可变大小的圆圈:

public void setupListeners(){
    frameLayout.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            float x = event.getX();
            float y = event.getY();

            int x_co = Math.round(x);
            int y_co = Math.round(y);

            Projection projection = map.getProjection();
            Point x_y_points = new Point(x_co, y_co);

            LatLng latLng = map.getProjection().fromScreenLocation(x_y_points);
            double latitude = latLng.latitude;

            double longitude = latLng.longitude;

            int eventaction = event.getAction();
            switch (eventaction) {
                case MotionEvent.ACTION_DOWN:
                    Log.d("dero", "Started drawing marker at: "+latLng.toString());
                    mStartDraw = latLng;
                    break;
                case MotionEvent.ACTION_MOVE:
                    //Log.d("dero", "Finger moved to: "+latLng.toString());
                    // finger moves on the screen
                    float[] distRes = new float[1];
                    Location.distanceBetween(mStartDraw.latitude, mStartDraw.longitude, latLng.latitude, latLng.longitude, distRes);
                    map.clear();
                    drawMusicMarker(mStartDraw, distRes[0]);
                    break;
                case MotionEvent.ACTION_UP:
                    Log.d("dero", "Circle finished at: "+latLng.toString());
                    mStartDraw = null;
                    mMapMovable = true;
                    return true;
            }

            return !mMapMovable;
        }
    });

这个效果相当不错,我可以随时在地图上拖出圆圈。但是因为每次用户手指移动时我都必须调用.clear(),这个圆圈在被绘制时会像疯了一样闪烁。有没有办法在不使用.clear()的情况下正确地为圆圈设置动画?

1 个答案:

答案 0 :(得分:0)

如果您使用填充色(Issue),显然地图上的圆圈会出现问题。

我找到动画的最佳方法是抓住通过将圆圈添加到地图返回的圆形对象,并更改其半径,并且只有在拖动完成后才填充它。