Java 加上“可见”;标记”;在Android中使用ItemizeOverlay将地质点表示为地图视图
我正在构建一个应用程序,它将GPS位置存储在SQLite数据库中,然后通过在点之间绘制红线,使用覆盖将数据输出到地图视图中 我希望能够显示这些点以及红线的图形标记(图像)。我的代码如下:Java 加上“可见”;标记”;在Android中使用ItemizeOverlay将地质点表示为地图视图,java,android,sqlite,overlay,android-mapview,Java,Android,Sqlite,Overlay,Android Mapview,我正在构建一个应用程序,它将GPS位置存储在SQLite数据库中,然后通过在点之间绘制红线,使用覆盖将数据输出到地图视图中 我希望能够显示这些点以及红线的图形标记(图像)。我的代码如下: public class MyOverlay extends ItemizedOverlay<OverlayItem> { // private Projection projection; private Paint linePaint; private Vector<GeoPoint&g
public class MyOverlay extends ItemizedOverlay<OverlayItem> {
// private Projection projection;
private Paint linePaint;
private Vector<GeoPoint> points;
public MyOverlay(Drawable defaultMarker) {
super(defaultMarker);
points = new Vector<GeoPoint>();
//set colour, stroke width etc.
linePaint = new Paint();
linePaint.setARGB(255, 255, 0, 0);
linePaint.setStrokeWidth(3);
linePaint.setDither(true);
linePaint.setStyle(Style.FILL);
linePaint.setAntiAlias(true);
linePaint.setStrokeJoin(Paint.Join.ROUND);
linePaint.setStrokeCap(Paint.Cap.ROUND);
}
public void addPoint(GeoPoint point) {
populate();
points.addElement(point);
}
//public void setProjection(Projection projection) {
// this.projection = projection;
// }
public void draw(Canvas canvas, MapView view, boolean shadow) {
populate();
int size = points.size();
Point lastPoint = new Point();
if(size == 0) return;
view.getProjection().toPixels(points.get(0), lastPoint);
Point point = new Point();
for(int i = 1; i<size; i++){
view.getProjection().toPixels(points.get(i), point);
canvas.drawLine(lastPoint.x, lastPoint.y, point.x, point.y, linePaint);
lastPoint = point;
}
}
@Override
protected OverlayItem createItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public int size() {
// TODO Auto-generated method stub
return 0;
}
}
公共类MyOverlay扩展了ItemizeOverlay{
//私人投影;
私人油漆;
私有向量点;
公共MyOverlay(可拖动默认标记){
超级(默认标记);
点=新向量();
//设置颜色、笔划宽度等。
linePaint=新油漆();
setARGB(255,255,0,0);
linePaint.设置行程宽度(3);
linePaint.setDither(真);
linePaint.setStyle(样式填充);
linePaint.setAntiAlias(真);
linePaint.setStrokeJoin(绘制.连接.圆形);
linePaint.setStrokeCap(油漆盖圆形);
}
公共无效添加点(地质点){
填充();
点。加法(点);
}
//公共空间集合投影(投影){
//这个。投影=投影;
// }
公共空白绘制(画布、地图视图、布尔阴影){
填充();
int size=points.size();
点lastPoint=新点();
如果(大小==0)返回;
view.getProjection().toPixels(points.get(0),lastPoint);
点=新点();
对于(int i=1;i看一看,看看它是否回答了您的问题。Jay您好,这正是我要找的canvas.drawBitmap方法。谢谢!Jay,我似乎收到了canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.arrow)“getResources()方法的一个错误对于类型MyOverlay“您需要一个上下文对象来调用getResources()”未定义。与每次绘制时访问资源并创建新的可绘制文件不同,您应该在地图活动中创建可绘制文件并将其传递给覆盖文件,或者将地图活动中的上下文传递给覆盖文件,并在构造函数中一次性获取可绘制文件。经验法则指出,最好避免创建新对象和执行以下操作:gic是你的绘制方法,因为它非常慢。根据使用情况,我还建议你在其他地方收集投影。Dave,谢谢你的回答。实际上,我对只为前2个绘制红线而不为其他任何点存在问题。这是因为我创建了项目吗离子?