web-dev-qa-db-ja.com

Android現在地のカスタムボタンのGoogleマップ

Googleマップの場所のデフォルトボタンを変更するにはどうすればよいですか?ロケーションを有効に設定し、ロケーションを見つけるために標準イメージをマップで描画しますが、デフォルトのイメージを変更することはできますか?

20
Nininea

以下のxmlファイルからカスタムボタンを参照してください。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >

    <fragment
        Android:id="@+id/maps"
        Android:name="pl.mg6.Android.maps.extensions.SupportMapFragment"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent" />

    <LinearLayout
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="10dp"
        Android:layout_marginRight="10dp"
        Android:layout_marginTop="5dp" >

        <ImageView
            Android:id="@+id/imgMyLocation"
            Android:layout_width="40dp"
            Android:layout_height="40dp"
            Android:scaleType="fitXY"
            Android:src="@drawable/track_my_location" />
    </LinearLayout>

</RelativeLayout>

次に、Javaクラスで、場所ボタンを宣言します。

private ImageView imgMyLocation;
        imgMyLocation = (ImageView) findViewById(R.id.imgMyLocation);

クリックイベント:

imgMyLocation.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                getMyLocation();

}

現在の緯度と経度を渡すだけで、ロケーションメソッドを取得します。

private void getMyLocation() {
        LatLng latLng = new LatLng(Double.parseDouble(getLatitude()), Double.parseDouble(getLongitude()));
        CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 18);
        googleMap.animateCamera(cameraUpdate);
    }
    });
29
Pratik Dasa

デフォルトの現在地ボタンの滑らかさを維持し、外観は維持したくない場合は、次の行を呼び出します。

//Make sure you have explicit permission/catch SecurityException
mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(false);

デフォルトの動作を維持したまま、ロケーションの更新を開始および停止できるようになりました

9
Zach

簡単なトリックを使用して、[場所]ボタンをカスタムボタンに置​​き換えることができます。

  1. 新しいボタンのレイアウトをカスタマイズします。
  2. マップAPIで現在地を有効に設定します。
  3. 現在地のデ​​フォルトボタンを非表示にします。
  4. カスタムボタンクリックで私の場所のクリックメソッドを呼び出します。

1。新しいボタンのレイアウトをカスタマイズする

マップアクティビティのレイアウトファイルの目的の場所に新しいボタンを追加します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
     xmlns:map="http://schemas.Android.com/apk/res-auto"
     xmlns:app="http://schemas.Android.com/apk/res-auto"
     xmlns:tools="http://schemas.Android.com/tools"
     Android:layout_height="match_parent"
     Android:layout_width="match_parent">

    <fragment
         Android:id="@+id/map"
         Android:name="com.google.Android.gms.maps.SupportMapFragment"
         Android:layout_width="match_parent"
         Android:layout_height="match_parent"
         tools:context=".activities.MapsActivity" />

   <ImageView
        Android:id="@+id/ic_location"
        Android:layout_width="18dp"
        Android:layout_height="18dp"
        Android:src="@drawable/ic_location"
        Android:layout_marginRight="8dp"
        Android:layout_marginBottom="18dp"
        Android:layout_alignParentRight="true"
        Android:layout_alignParentBottom="true"/>
</RelativeLayout>

2。マップAPIでロケーションを有効に設定

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    // Enable My Location
    mMap.setMyLocationEnabled(true);
    /* and DON'T disable the default location button*/
 }

。現在地のデ​​フォルトボタンを非表示にします。

    //Create field for map button.
    private View locationButton;

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        mMap.setMyLocationEnabled(true);

        // get your maps fragment
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
        // Extract My Location View from maps fragment 
        locationButton = mapFragment.getView().findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2"));
        // Change the visibility of my location button
        if(locationButton != null)
            locationButton.setVisibility(View.GONE);
    }

4。カスタムボタンクリックで自分の場所のクリックメソッドを呼び出します。

findViewById(R.id.ic_location).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(mMap != null)
            {
                if(locationButton != null)
                    locationButton.callOnClick();

            }
         }
    });
8
Ali009

これは、トリックや回避策を使用する代わりに、場所アイコンを直接変更することを探している人に役立つ場合があります。

locationButton = (mapView.findViewById<View>(Integer.parseInt("1")).parent as View)
    .findViewById<ImageView>(Integer.parseInt("2"))

locationButton.setImageResource(R.drawable.ic_location_current)`

ここに findViewById<ImageView>が正しいことです。

1
Abhijeet Hallur