java 绘制地铁线路 android,Java-叠加层仅在Android中的前2个GPS点之间绘制线条

我在Android中使用ItemizedOverlay遇到异常错误.

我正在创建一个GPS跟踪设备,该设备可以绘制数据库中存储的航点之间的路线.

当我通过Eclipse中的仿真器提供前两组经度和纬度点时,它会按照我的意愿绘制一条红线,但是如果我发送另一个GPS点,它将设置为动画点,但不会从该点绘制一条线最后一点.

public class MyOverlay extends ItemizedOverlay

{

// private Projection projection;

private Paint linePaint;

private Vector points;

public MyOverlay(Drawable defaultMarker) {

super(defaultMarker);

points = new Vector();

//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) {

points.addElement(point);

}

public void draw(Canvas canvas, MapView view, boolean shadow) {

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

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;

}

}

解决方法:

在您的代码中,draw()方法仅被调用一次,因此永远不会被调用.填充方法将重新填充列表中每次出现的所有叠加点.因此,它将再次调用draw方法,它将为您绘制一条线.

package com.example.mymap;

import java.util.ArrayList;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.graphics.Point;

import android.graphics.drawable.Drawable;

import com.google.android.maps.GeoPoint;

import com.google.android.maps.ItemizedOverlay;

import com.google.android.maps.MapView;

import com.google.android.maps.OverlayItem;

public class ItemOverLay extends ItemizedOverlay {

private ArrayList mOverlays = new ArrayList();

GeoPoint prePoint=null,currentPoint=null;

MapView mapView=null;

Paint paint=new Paint();

public ItemOverLay(GeoPoint prePoint,GeoPoint currentPoint, Drawable defaultMarker,MapView mapview) {

super(boundCenterBottom(defaultMarker));

this.currentPoint=currentPoint;

this.prePoint = prePoint;

mapView=mapview;

// TODO Auto-generated constructor stub

}

public ItemOverLay(Drawable defaultMarker) {

super(defaultMarker);

// TODO Auto-generated constructor stub

}

public void addOverlay(OverlayItem item){

mOverlays.add(item);

populate();

}

@Override

protected OverlayItem createItem(int i) {

// TODO Auto-generated method stub

return mOverlays.get(i);

}

@Override

public void draw(Canvas canvas, MapView mapView, boolean shadow) {

super.draw(canvas, mapView, shadow);

Paint paint=new Paint();

Point screenCoords=new Point();

Point screenCoords1=new Point();

mapView.getProjection().toPixels(prePoint, screenCoords);

int x1=screenCoords.x;

int y1=screenCoords.y;

mapView.getProjection().toPixels(currentPoint, screenCoords1);

int x2=screenCoords1.x;

int y2=screenCoords1.y;

paint.setStrokeWidth(1);

canvas.drawLine(x1, y1, x2, y2, paint);

}

@Override

public int size() {

// TODO Auto-generated method stub

return mOverlays.size();

}

}

标签:sqlite,overlay,itemizedoverlay,java,android

来源: https://codeday.me/bug/20191210/2099703.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值