3

Android マップdraw()のクラスのメソッドについて質問があります。Overlay

マップを移動すると、メソッドdraw()が数回呼び出されます (4 から 13)。この方法ではルートを 70000 以上のポイントで再描画する必要があり、これは多くのリソースになるため、私にとっては問題です。

この問題の説明が見つかりませんが、ソースのコード例を使用すると、同じ問題が発生します。

4

2 に答える 2

6

これは通常の動作です。マップを移動するときは、マップがスムーズに移動し、マップの移動がより小さな移動ステップでスリップすることを期待します。

一貫性を保つためにdraw()、この小さなステップの動きごとにオーバーレイのメソッドが呼び出されるため、このステップごとにオーバーレイ項目を再配置できます。

以下を使用して改善できます。

改善1

小さなステップごとに、onDrawが 2 回呼び出されます。shadowパラメータが に等しいものとtrueに等しいものfalse。影を描画していない場合は、呼び出しの 1 つを無視するだけでよいため、次の行を の最初の行として使用して、オーバーヘッドを 2 減らすことができますonDraw()

if(shadow) return;

改善 2

ルートの描き方を最適化します。を使用している場合は、 を使用canvas.drawLine()することで確実に改善できますcanvas.drawPath()。(特定のズーム レベルに対して) ルートを使用してパスを 1 回だけ作成し、マップを移動するときにパスをオフセットするだけで、パスを再作成する必要はありません。

改善3

パスをさらに最適化することもできます。前のピクセルからの距離が特定の値 (つまり 2 ピクセル) よりも大きいポイントのみを追加し、目に見える品質の低下なしにパス内のポイントの総数を減らします。

上記のアプローチを数千ポイント (約 20.000) のルートで使用しており、ルートは中距離デバイスでスムーズに移動します。

上記の点のいずれかで詳細が必要な場合はお知らせください。

幸運を。

于 2012-10-17T14:23:26.333 に答える
0

私はあなたが使用していると思います

boolean draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow, long when)

そしてそうではない

void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow)

最初のものはアニメーションを描画するために使用されるため、何度も呼び出されます。

参照: Android マップ オーバーレイで draw が常に呼び出されている

于 2012-10-17T13:13:50.523 に答える