Googleマップの場所のデフォルトボタンを変更するにはどうすればよいですか?ロケーションを有効に設定し、ロケーションを見つけるために標準イメージをマップで描画しますが、デフォルトのイメージを変更することはできますか?
以下の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);
}
});
デフォルトの現在地ボタンの滑らかさを維持し、外観は維持したくない場合は、次の行を呼び出します。
//Make sure you have explicit permission/catch SecurityException
mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(false);
デフォルトの動作を維持したまま、ロケーションの更新を開始および停止できるようになりました
簡単なトリックを使用して、[場所]ボタンをカスタムボタンに置き換えることができます。
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();
}
}
});
これは、トリックや回避策を使用する代わりに、場所アイコンを直接変更することを探している人に役立つ場合があります。
locationButton = (mapView.findViewById<View>(Integer.parseInt("1")).parent as View)
.findViewById<ImageView>(Integer.parseInt("2"))
locationButton.setImageResource(R.drawable.ic_location_current)`
ここに findViewById<ImageView>
が正しいことです。