谷歌地图为Android我的位置自定义按钮

时间:2014-05-27 07:14:57

标签: android google-maps-android-api-2 android-maps-v2 android-maps

如何更改谷歌地图我的位置默认按钮? 我设置了我的位置启用和地图绘制标准图像以查找位置,是否可以更改默认图像?

5 个答案:

答案 0 :(得分:29)

请参阅以下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);
    }
    });

答案 1 :(得分:8)

如果要保留默认“我的位置”按钮的平滑度而不是外观,请调用以下行:

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

现在你可以开始&amp;在保持默认行为的同时停止位置更新

答案 2 :(得分:6)

通过简单的技巧,您可以使用自定义按钮替换我的位置按钮。

  1. 自定义新按钮的布局。
  2. 在maps api中启用我的位置设置。
  3. 隐藏我所在位置的默认按钮。
  4. 点击自定义按钮,点击我所在位置的点击方法。
  5. <强> 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*/
     }
    

    第3。隐藏我所在位置的默认按钮。

        //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();
    
                }
             }
        });
    

答案 3 :(得分:1)

这对于想要直接更改位置图标的人很有用,而不是使用任何技巧或解决方法:

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

locationButton.setImageResource(R.drawable.ic_location_current)`

findViewById<ImageView>是正确的选择。

答案 4 :(得分:0)

我使用 ImageViewidtag instead of 类型 id` lint 警告的预期资源获取我所在位置的默认 for preventing -

ImageView imageView = ((ImageView)mapFragment.getView().findViewWithTag("GoogleMapMyLocationButton"));

然后你就可以操作 imageView 了。

imageView.setImageResource(R.drawable.icon_custom_location);