私は、ユーザーがルートを追跡して表示できるAndroidアプリを開発しています。私はgpsを使用し、ユーザーの場所を見つけ、各場所を配列リストに保存し、オーバーレイ上の各ポイントに線を描画するマップビューを持っています。これらはすべて実際のGoogleマップで正常に機能します。ただし、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;
}
}
だから私の質問は、どこが間違っているのかということです。いくつかの印刷ステートメントを挿入し、キャンバスとポイントを描画しようとしましたが、緑の背景以外には何も表示されません。ランタイムエラーは発生しません。
補足として、printステートメントは期待どおりにジオポイントを表示します。どういうわけか、ジオポイントをスクリーンポイントに変換する必要がありますか?また、これをマップビューの上に上に描画していますが、それがまったく機能しない理由と関係があるのでしょうか。
よろしくお願いします。