web-dev-qa-db-ja.com

Googleマップマーカーのツールバーを自動的に表示する

マーカーがあり、マップを開くとマーカーが表示されます。クリックすると、タイトルと、マップの右下にある2つのボタンを含むツールバーが表示され、マーカーに移動したり、Googleマップで表示したりするためのインテントを起動できます。ユーザーがマーカーをクリックするのではなく、マップを開くときにこれらを自動的に表示したいと思います。

このような :-) ... enter image description here 私はこれを行う方法を解決できないようです。

私が試してみました:

// create marker
MarkerOptions marker = new MarkerOptions().position(
        new LatLng(latitude, longitude)).title("title");

// adding marker
googleMap.addMarker(marker).showInfoWindow();
googleMap.getUiSettings().setMapToolbarEnabled(true);

ただし、これはマーカーのタイトルと、右上にある2つのツールバーのインテントボタンではなく、右上にあるボタンを示しています。

このような :-( ... enter image description here 私は少しアイデアが行き詰まっていますか?

27
samleighton87

マーカーがクリックされたときに表示されるオーバーレイは、その場で暗黙的に作成および破棄されます。 (まだ)手動で表示することはできません。

この機能が必要な場合は、2 ImageViewsを使用してマップ上にオーバーレイを作成し、クリックされたときに適切なインテントを呼び出すことができます。

_// Directions
Intent intent = new Intent(Android.content.Intent.ACTION_VIEW, Uri.parse(
        "http://maps.google.com/maps?saddr=51.5, 0.125&daddr=51.5, 0.15"));
startActivity(intent);
// Default google map
Intent intent = new Intent(Android.content.Intent.ACTION_VIEW, Uri.parse(
        "http://maps.google.com/maps?q=loc:51.5, 0.125"));
startActivity(intent);
_

注:マーカーのgetPosition()とユーザーの位置に基づいて座標を変更する必要があります。

デフォルトのオーバーレイを非表示にするには、OnMarkerClickListenerでtrueを返すだけです。マーカーにInfoWindowsと中央カメラを表示する機能は失われますが、それを十分に模倣できます。

_mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker marker) {
        marker.showInfoWindow();
        mMap.animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition()));
        return true;
    }
});
_
14
Simas

ここに機能リクエストを追加しました: http://code.google.com/p/gmaps-api-issues/issues/detail?id=7652

8
rockgecko

ドキュメントを引用する:

ライトモードマップでは、ツールバーはユーザーのアクションに関係なく持続します。完全にインタラクティブなマップでは、ユーザーがマーカーをタップするとツールバーがスライドインし、マーカーがフォーカスを失ったときに再びスライドアウトします。

対話型のマップなので、あなたのケースでツールバーを永続化する方法はないようです。 lite-modeが必要な場合は、lite-modeを使用してみてください: https://developers.google.com/maps/documentation/Android/lite

あなたのコードも見てください:

_// create marker
MarkerOptions marker = new MarkerOptions().position(
        new LatLng(latitude, longitude)).title("title");

// adding marker
googleMap.addMarker(marker).showInfoWindow();
googleMap.getUiSettings().setMapToolbarEnabled(true);
_

最後の行:googleMap.getUiSettings().setMapToolbarEnabled(true);は、事前に明示的にfalseに設定しない限り、冗長です。ドキュメントには次のように記載されています:

マップツールバーを有効にするか無効にするかを設定します。有効にすると、ユーザーは「Googleマップアプリでこのマップを開く」や「Googleマップアプリで強調表示されたマーカーへの道順を見つける」など、さまざまなコンテキスト依存アクションのバーを表示します。

デフォルトでは、マップツールバーは有効になっています。

リンク: https://developer.Android.com/reference/com/google/Android/gms/maps/UiSettings.html#setMapToolbarEnabled(boolean)

お役に立てれば。

6
user2511882

私が間違っていない場合は、マップの右側のマーカーに関連する2つのボタンを表示し、それらのボタンがマーカーに依存している場合はtrueです以下のコードと作成時にこのメソッドを呼び出すだけで、マーカークリックリスナーで確認してください

@Override
public void markerIntentButtonShow(Marker marker) {
      //setvisible(true) to your side buttons or call some Intent
      Intent i = new Intent(getActivity(), MarkerViewDetails.class);
      i.putExtra("marker_snippet", marker.getSnippet());
      startActivity(i);
}

クリックリスナーでメソッドを呼び出します

        googleMap
                .setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

                    @Override
                    public void onInfoWindowClick(Marker marker) {

                            markerIntentButtonShow(marker);
                    }
                });

onCreateViewで

MarkerOptions marker = new MarkerOptions().position(
        new LatLng(latitude, longitude)).title("title");
googleMap.addMarker(marker).showInfoWindow();
markerIntentButtonShow(marker);
2
phpniki

私は同様の問題を抱えていた.....ユーザーがマップを閲覧せずにマーカーに焦点を合わせさせても構わない場合は、 lite-mode map ....を使用できます。ドキュメンテーション

lite-mode マップでは、ツールバーはユーザーのアクションに関係なく持続します。完全にインタラクティブなマップでは、ユーザーがマーカーをタップするとツールバーがスライドインし、マーカーがフォーカスを失ったときに再びスライドアウトします。

再び docs から

また、デフォルトでは、ユーザーが地図をタップすると、APIはGoogleマップモバイルアプリを起動します。 GoogleMap.setOnMapClickListener()を使用して独自のリスナーを設定することにより、これをオーバーライドできます。 MapViewまたはMapFragmentを含むビューでsetClickable()を呼び出すことにより、マップ上のイベントを disable クリックすることもできます。

2
sanket vetkoli

赤で概説したツールバーの場合、 ISettingsのsetMapToolbarEnabled()メソッド を使用して無効にできます

ドキュメントから:

マップツールバーを有効にするか無効にするかを設定します。有効にすると、ユーザーは「Googleマップアプリでこのマップを開く」や「Googleマップアプリで強調表示されたマーカーへの道順を見つける」など、さまざまなコンテキスト依存アクションのバーを表示します。

2つのボタンを無効にするコード例:

//Disable Map Toolbar:
mMap.getUiSettings().setMapToolbarEnabled(false);

ズームボタンについても疑問に思っている場合に備えて、次のように無効にすることができます。

mMap.getUiSettings().setZoomControlsEnabled(false);
2
Naveen Kumar M

情報ウィンドウの代わりにDialogFragmentを表示し、その中のすべてを処理します。

@Override
public boolean onMarkerClick(Marker marker) {
    FragmentManager fm = getSupportFragmentManager();
    DialogFragment markerWebView = DialogFragment();
    mMap.animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition()));
    markerWebView.show(fm, "fragment_marker");
    return true;
}

OR

Googleマップボタンのファクシミリ を使用して、マーカーのクリックを使用してオーバーレイのオン/オフを切り替えます

mMap.setOnMarkerClickListener(this);
mMap.setOnInfoWindowClickListener(this);


@Override
public boolean onMarkerClick(Marker marker) {
    //here turn on the overlays for nav turns etc. for this marker.
    return false
}

@Override
public void onInfoWindowClick(Marker marker) {
    //here turn off the overlays for nav turns etc.
    marker.hideInfoWindow();
}
1
danny117