3

私は完全に機能してGoogleMapおり、電話でユーザーの場所を表示できます

mMap.setMyLocationEnabled(true);

私が達成したいのは、現在表示されているボタンの実際のクリックの機能ですGoogleMap(つまり、正しいズームでユーザーの場所にマップをアニメーション化するなど)。

機能はすでにGoogleMapオブジェクトにありますが、どのように使用しますか?

これを実現するためになどを使用したくはありませんLocationListener。マップ上のボタンをクリックしたときに呼び出される「同じコードを呼び出す」だけです。そんなに簡単でしょうか?

前もって感謝します。

編集:

私が基本的にやりたいのは、ボタンをクリックしたときにGoogleMapがユーザーの場所を中心にするのとまったく同じように、地図をユーザーの場所の中心に置くことです。このような:

    GoogleMap mMap = this.getMap();
    if(mMap != null) {
        mMap.setMyLocationEnabled(true);
        //TODO center the map on mylocation
    }

編集:

どうやらGoogleはこれに取り組んでいます。http://code.google.com/p/gmaps-api-issues/issues/detail?id=4644

4

3 に答える 3

4

これは、最初の場所の更新を取得したときにマップの中央に移動する方法です。

私のクラスヘッダー:

public class FragActivity extends SherlockFragmentActivity implements  OnMyLocationChangeListener

private GoogleMap mMap;

私のmMap-setup:

    if (mMap == null) {
        // Try to obtain the map from the SupportMapFragment.
        mMap = customMapFragment.getMap();

        // Check if we were successful in obtaining the map.
        if (mMap != null)
            setUpMap();
    }

setUpMap-メソッド:

private void setUpMap() {
    mMap.setMyLocationEnabled(true);
    mMap.setOnMyLocationChangeListener(this);
}

と私のonlocationchange:

@Override
public void onMyLocationChange(Location lastKnownLocation) {
    CameraUpdate myLoc = CameraUpdateFactory.newCameraPosition(
            new CameraPosition.Builder().target(new LatLng(lastKnownLocation.getLatitude(),
                    lastKnownLocation.getLongitude())).zoom(6).build());
    mMap.moveCamera(myLoc);
    mMap.setOnMyLocationChangeListener(null);
}

チャームのように機能します

于 2013-02-27T13:07:24.140 に答える
3

他の答えがsについて話している理由はよくわかりませんOnMyLocationChangeListener。これはOPで求められたものではありません。質問されたのは、MyLocationButtonをクリックする正確な動作を再現する方法でした。これは、実際には、カメラをユーザーの場所にアニメーション化するよりも複雑です。ボタンは、現在使用しているズームレベルに応じて異なる動作をします。

たとえば、ズームアウトしているときにボタンをクリックすると、ズームインしながら現在地にアニメーション化されますが、すでに特定のズームレベルになっている場合は、ボタンをクリックすると、現在の位置を維持したまま現在地にアニメーション化されますズームレベル。

この動作を丹念に再現しようとするのではなく、MyLocationButtonへの参照を取得して、それをクリックするだけでよいのではないでしょうか。さて、これは私がまさにそれをするために見つけた現在の最良の方法です:

@OnClick(R.id.fabMyLocation)
public void onMyLocationClick(FloatingActionButton fabMyLocation) {
    View myLocationButton = ((View) mapFragment.getView().findViewById(Integer.parseInt("1")).getParent())
            .findViewById(Integer.parseInt("2"));

    myLocationButton.performClick();
}

ええ、それはきれいではなく、GoogleMapsAPIの将来のバージョンで変更される可能性のあるハードコードされたIDに依存しています。しかし、ボタンを取得するこの方法は、2013年からのこの高評価の回答に基づいており、これまでのところ、Google Playサービス8.4.0の時点で、問題なく機能しています。

于 2016-01-05T23:42:43.843 に答える
1

2013年2月の更新:

これが可能になりました。これで、マップのOnMyLocationChangeListenerを設定できます。必要に応じてアップデートを受け取り、それに応じてカメラを動かします。

これは不可能です。AndroidのGoogleMapは、提供する情報が非常に限られていることがわかりました。ユーザーの位置情報の更新や、ユーザーが押すことができるボタンに直接アクセスすることはできません(有効/無効にすることはできますが、押すことをシミュレートすることはできません)。

LocationSourceおよびLocationListenerインターフェイスを実装し、LocationManagerを使用してデバイスから更新を取得し、それらを使用してマップに送信する必要があります。

次に、独自のカスタムボタンをオーバーレイに追加してデフォルトのボタンを複製し、独自のカメラとズームコントロールを使用して機能をシミュレートできます。

出典:検索時間

于 2013-02-05T05:46:39.270 に答える