私は、現在の場所(GPSから取得)から彼の移動方法までのルートをmapViewに描画しようとしています。
ユーザーが特定の方向に移動するときにユーザーの位置を取得することはできましたが、パスを描画することはできませんでした。
彼が場所から場所へと連続的に移動するときにルートパスを描くための最良の方法は何ですか?
私はこの方法が(パフォーマンスの点で)優れていることを望んでいます。
私は、現在の場所(GPSから取得)から彼の移動方法までのルートをmapViewに描画しようとしています。
ユーザーが特定の方向に移動するときにユーザーの位置を取得することはできましたが、パスを描画することはできませんでした。
彼が場所から場所へと連続的に移動するときにルートパスを描くための最良の方法は何ですか?
私はこの方法が(パフォーマンスの点で)優れていることを望んでいます。
パスを描画するには、現在の場所と以前の場所(グローバル変数など)を追跡する必要があります[最初に現在の場所しかないため、次のポイントまで何もしません]。
int x1 = -1, y1 = -1, x2 = -1, y2 = -1;
Paint paint = new Paint();
paint.setColor(Color.rgb(0x7b, 0x7b, 0xff));
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
Point prevloc = new Point();
mv.getProjection().toPixels(new GeoPoint((int (prevlocation.getLatitude()*1.0E6),(int) (prevlocation.getLongitude()*1.0E6)), prevloc);
Point loc = new Point();
mv.getProjection().toPixels(new GeoPoint((int (location.getLatitude()*1.0E6),(int) (location.getLongitude()*1.0E6)), loc);
x2 = prevloc.x;
y2 = prevloc.y;
if (first)
{
x2 = loc.x;
y2 = loc.y;
}
if (!first) {
canvas.drawLine(x1, y1, x2, y2, paint);
}
x1 = x2;
y1 = y2;
これが呼び出されdraw()
、関数内の描画オーバーレイを介してこの描画関数を何らかの方法で呼び出すことができますonLocationChanged()
。
注:canvasとmvは関数に渡されるパラメーターdraw()
であり、firstは、これが最初に取得するかどうかを示すグローバルブール変数です。
public void draw(Canvas canvas, MapView mapv, boolean shadow){
super.draw(canvas, mapv, shadow);
Projection projection = mapv.getProjection();
Path p = new Path();
for (int i = 0; i < geoPointsArray.size(); i++) {
if (i == geoPointsArray.size() - 1) {
break;
}
Point from = new Point();
Point to = new Point();
projection.toPixels(geoPointsArray.get(i), from);
projection.toPixels(geoPointsArray.get(i + 1), to);
p.moveTo(from.x, from.y);
p.lineTo(to.x, to.y);
}
Paint mPaint = new Paint();
mPaint.setStyle(Style.STROKE);
mPaint.setColor(Color.GREEN);
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(5);
canvas.drawPath(p, mPaint);
mapv.invalidate();
super.draw(canvas, mapv, shadow);
}//draw()
上記の方法を使用して、場所から場所へ移動するときにルートを描画できます。geoPointsArray
受信した場所の配列です。