3

Googleマップの外部ライブラリを使用して、Android(およびiPhone)のマップに存在する現在地の追跡機能を複製する方法を探しています。マップでこの機能が機能する方法は、ボタンを押すと、マップに触れる(および/または移動する)まで、現在地でパンを開始することです。以下を使用して、アプリで現在の場所を画面の中央に保持することはできましたが、現在の場所を画面の中央に保持することはできません(場所が画面の端に近づくとパンしますが、マップはそれを画面の端に保持します常に中央に配置):

butMapCurrentLocation.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        runOnUiThread(new Runnable() {
            public void run() {
                mapController.animateTo(myLocationOverlay.getMyLocation());
            }
        });
    }
});

私も試してみsetCenterましanimateToたが、同じ効果があるようです。

さらに、位置を中央に保つこの機能を停止できる必要があることに注意してください(別のボタンが押されたときや地図がタッチされたときなど)。上記のRunnableはすぐには停止せず、ここで説明するように.cancelを使用している場合でも、要求されたときに正しく停止させることができません。Android:Runnableを停止するにはどうすればよいですか?

4

1 に答える 1

1

Google マップ v2 でこれを行う公式の方法はまだありません。

ただし、やりたいことはできます。あなたがしなければならないことが2つあります:

  1. ユーザーの位置を取得するために、いくつかの LocationProviders (gps など) からの位置の更新に登録します。場所を取得したら、マップを新しい場所にアニメーション化します。
  2. ユーザーがマップを移動したときにこれを停止します。

したがって、1. を行うのは簡単ですが、2. を行うことは Maps v2 API では公式には不可能です。詳細については、この問題を参照してください。

提案された回避策は、独自の MapView を作成 (元の MapView を拡張) し、そのdispatchTouchEventメソッドをオーバーライドすることです。そこでは、あらゆるタッチ イベントをキャッチし、ユーザーが地図に触れたり移動したりしたかどうかを検出できます。

于 2013-01-08T20:36:38.793 に答える