我正在开发一个 android 应用程序,它允许用户跟踪他们的路线并将其显示给他们。我有一个使用 gps 的地图视图,找到一个用户位置,将每个位置保存到一个数组列表中,并在覆盖层上的每个点上画线,所有这些在实际的谷歌地图上都可以正常工作。但是,我想使用 androids 的画布功能创建更详细的视图。画布显示(作为绿色背景),但当我尝试在地理点数组列表之间绘制时,线条(和点)不显示。我通过调用内部类将内容视图设置为画布,如下所示:
setContentView(new SimulationDraw(this));
this.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
paint = new Paint(Color.LTGRAY);
这是有问题的课程:
class SimulationDraw extends View {
private ColourGeoPoint firstPoint;
private Object lastCGP;
private int lastCGPLong;
private int lastCGPLat;
public SimulationDraw(Context context) {
super(context);
// TODO Auto-generated constructor stub
firstPoint = null;
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawColor(Color.GREEN);
paint.setColor(Color.LTGRAY);
paint.setStrokeWidth(20);
paint.setStyle(Paint.Style.STROKE);
for(ColourGeoPoint point : trackOverlay.geoPointsArray){
int loclat = point.getGeoLocation().getLatitudeE6();
System.out.println("LOCLAT" + loclat);
int loclong = point.getGeoLocation().getLongitudeE6();
System.out.println("LOCLONG" + loclong);
canvas.drawPoint(loclat, loclong, paint);
if (lastCGP == null) {
lastCGP = point;
lastCGPLat = point.getGeoLocation().getLatitudeE6();
System.out.println("LASTCGPLAT" + lastCGPLat);
lastCGPLong = point.getGeoLocation().getLongitudeE6();
System.out.println("LASTCGPLONG" + lastCGPLong);
} else {
Path path = new Path();
path.moveTo(loclat,loclong);
path.lineTo(lastCGPLat, lastCGPLong);
canvas.drawLine(loclat, loclong, lastCGPLat, lastCGPLong, paint);
canvas.drawPoint(loclat, loclong, paint);
lastCGP = point;
}
}
所以我的问题是,我哪里出错了?我插入了一些打印语句并尝试绘制画布和点,但除了绿色背景之外什么都没有显示。我没有运行时错误。
作为旁注,打印语句按预期显示地理点。我是否需要以某种方式将地理点转换为屏幕点?我也在地图视图的顶部画了这个,这可能与它为什么根本不起作用有关吗?
提前谢谢了。