Android - Draw a path (array of points) in MapView
来源:互联网 发布:欧洲四猪 知乎 编辑:程序博客网 时间:2024/05/23 15:46
Although this post differs from my blog routine I am writing because I haven’t found an efficient way of displaying a list of GeoPoints to a MapView. This is often useful when you want to display directions from Google service inside your Android application.
Key features:
- A custom overlay that extends com.google.android.maps.Overlay
- Efficient way of displaying a path. The path is drawn over the same overlay.
- Smooth Lines, useful when there are a lot of corners like the example below
- Easy to use
- Easy to extend - Just under 90 lines of code
- Available on Bitbucket
Here is a sample result of using my overlay to display a list of points (The green marker is not included).
You can use it like this
List<GeoPoint> path = new ArrayList<GeoPoint>();//add your points somehow...mapView.getOverlays().add(new RoutePathOverlay(path));
Here is the complete RoutePathOverlay.java (it's also available on Bitbucket)
import java.util.List;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.Point;import android.graphics.RectF;import com.google.android.maps.GeoPoint;import com.google.android.maps.MapView;import com.google.android.maps.Overlay;import com.google.android.maps.Projection; public class RoutePathOverlay extends Overlay { private int _pathColor; private final List<GeoPoint> _points; private boolean _drawStartEnd; public RoutePathOverlay(List<GeoPoint> points) { this(points, Color.RED, true); } public RoutePathOverlay(List<GeoPoint> points, int pathColor, boolean drawStartEnd) { _points = points; _pathColor = pathColor; _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(2); int _radius = 6; 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(5); paint.setAlpha(90); 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; }}
转帖:http://john.katsiotis.com/blog/android---draw-a-path-array-of-points-in-mapview
- Android - Draw a path (array of points) in MapView
- Converting a array to an array of ranges in ruby
- A cycle was detected in the build path of project Build path Build Path Problem(Eclipse)
- A cycle was detected in the build path of project
- A cycle was detected in the build path of project
- A cycle was detected in the build path of project
- A cycle was detected in the build path of project
- A cycle was detected in the build path of project
- A cycle was detected in the build path of project
- A cycle was detected in the build path of project
- A cycle was detected in the build path of project
- A cycle was detected in the build path of project
- No. 47 - Search in a Rotation of an Array
- [LeetCode]Maximum number of points on a straight line in 2d plane
- android mapview
- android mapview
- How to find number of a specific integer in an array of Fixnums ruby
- Matching Portions of A String to Elements of an Array in Ruby
- C/C++内存泄露及其检测工具
- 用户修改密码代码
- Hdu 2876 Ellipse, again and again
- android中sqlite数据库处理
- Mysql迁移至PostGreSQL方案
- Android - Draw a path (array of points) in MapView
- console_init初始化的研究
- WinSock IO模型三: WSAEventSelect 事件机制
- c语言文件读写的一个例子
- Embedded Linux Development Environment Building
- google-breakpad学习资料
- 折腾了好几次 终于会换系统了
- 《算法导论》算法C++实现(七)P102 桶排序
- Socket 长连接与短连接,心跳