我正在开发一个Android应用程序,它允许用户跟踪他们的路线并将其显示给他们。我有一个mapview,它使用gps,找到一个用户位置,将每个位置保存到一个arraylist,并绘制线到覆盖层上的每个点都在实际的谷歌地图上正常工作。但是,我想使用androids canvas功能创建更详细的视图。画布显示(作为绿色背景)但当我尝试在地理点的数组列表之间绘制时,线条(和点)不会显示。我通过调用内部类将内容视图设置为画布,如下所示:
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;
}
}
所以我的问题是,我哪里出错了?我插入了一些打印语句并尝试绘制画布和点,但除绿色背景外没有任何显示。我没有运行时错误。
作为旁注,打印语句按预期显示Geopoints。我是否需要以某种方式将地理点转换为屏幕点?另外我在地图视图中将其绘制在顶部,这可能与它为何无法正常工作有关吗?
非常感谢提前。