攻撃方法がよくわからないという奇妙な問題があるので、誰かが以前に同様の問題を抱えていたのではないかと思っています。
ItemizedOverlay サブクラスの draw(Canvas canvas, MapView mapView, boolean shadow) メソッドをオーバーライドして、アイテム間にパスやテキストなどを描画します。オーバーライドで最初に行うことは、これらすべてのパラメーターを指定して super.draw を呼び出すことです。アプリを起動すると、オーバーライドで描画した線は本来あるべき場所にありますが、super.draw が描画する実際の OverlayItems はかなりずれています。興味深いことに、マップを左上隅 (座標 0,0) に向かって移動すると、OverlayItems が予想される場所にどんどん近づいていきます (実際、最初のものを取得すると、完全に一致するように見えます)。アイテムからポイント (0,0))。OverlayItems が (0,0) ポイントから遠ざかるようにマップを移動すると、位置情報から直線的に遠ざかります。
これまでに誰もこの問題に直面したことがなく、それが明らかでない場合のために、この動作がまだ残っている最小限の例を作成して、ここに投稿します。実際のコードは比較的大きいので、何が問題なのか誰かがわかっている場合は、それほど多くの作業を避けたいと思います。
編集:役立つかもしれない追加情報...私の描画方法は次のようになります:
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
super.draw(canvas, mapView, shadow);
if (!shadow) {
// code for drawing the lines etc.
// on the canvas (uses mapView.getProjection())
}
}
オーバーレイのカスタム部分にはシャドウ レイヤーがありません (オーバーレイを問題なく拡張するときに同じロジックを使用しました)。Super.draw によって OverlayItems に対して描画されるシャドウ レイヤーは、実際には、Drawable と特定の各アイテムの予想される位置情報の中間にあります。
何が起こっているかをよりよく説明するために、avd のツリーのスクリーンショットを次に示します。4 つの赤いピンは、その上の赤い線上にある必要があり、マップを左上にスライドすると、実際には線に向かって移動します。2 つのピンとそれらの間の線はカスタム オーバーライドで描画され、super.draw は 4 つの影と 4 つの追加の赤いピンを描画します。
これは私の最初の投稿であり、複数のリンクを投稿することはできないため、3 つのスクリーンショットすべてを同じ jpg に入れました。
スクリーンショット