1

私は、この時点からその時点までのアプリケーションの方向性をマップ Google で構築しています。私のコードは成功しましたが、マップをズームすると、マップ上の線の方向が失われます。地図をズームアウトすると、私の線画が表示されます。手伝って頂けますか!このソース コードは 2 点間に線を引きます!

class MyOverLay extends Overlay {

    private final List<GeoPoint> points;
    private boolean drawStartEnd;
    private int pathColor;

    public MyOverLay(List<GeoPoint> pointToDraw) {
        // TODO Auto-generated constructor stub
        this(pointToDraw, Color.BLUE, true);
    }

    public MyOverLay(List<GeoPoint> points, int pathColor,
            boolean drawStartEnd) {
        this.points = points;
        this.pathColor = pathColor;
        this.drawStartEnd = drawStartEnd;
    }

    private void drawOval(Canvas canvas, Paint paint, Point point) {
        Paint ovalPaint = new Paint(paint);
        ovalPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        ovalPaint.setStrokeWidth(3);
        ovalPaint.setColor(Color.BLUE);
        int _radius = 7;
        RectF oval = new RectF(point.x - _radius, point.y - _radius,
                point.x + _radius, point.y + _radius);
        canvas.drawOval(oval, ovalPaint);
    }

    public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
            long when) {
        Projection projection = mapView.getProjection();
        if (shadow == false && points != null) {
            Point startPoint = null, endPoint = null;
            Path path = new Path();
            // We are creating the path
            for (int i = 0; i < points.size(); i++) {
                GeoPoint gPointA = points.get(i);
                Point pointA = new Point();
                projection.toPixels(gPointA, pointA);
                if (i == 0) { // This is the start point
                    startPoint = pointA;
                    path.moveTo(pointA.x, pointA.y);
                } else {
                    if (i == points.size() - 1)// This is the end point
                        endPoint = pointA;
                    path.lineTo(pointA.x, pointA.y);
                }
            }

            Paint paint = new Paint();
            paint.setAntiAlias(true);
            paint.setColor(pathColor);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(8);
            paint.setAlpha(100);
            if (getDrawStartEnd()) {
                if (startPoint != null) {
                    drawOval(canvas, paint, startPoint);
                }
                if (endPoint != null) {
                    drawOval(canvas, paint, endPoint);
                }
            }
            if (!path.isEmpty())
                canvas.drawPath(path, paint);
        }
        return super.draw(canvas, mapView, shadow, when);
    }

    public boolean getDrawStartEnd() {
        return drawStartEnd;
    }

    public void setDrawStartEnd(boolean markStartEnd) {
        drawStartEnd = markStartEnd;
    }
}
4

0 に答える 0