【问题标题】:How to change Google Maps marker icon?如何更改谷歌地图标记图标?
【发布时间】:2017-04-27 12:48:29
【问题描述】:

我想更改谷歌地图上选定的标记图标,所以我有以下代码:

googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            if (null != currentMarker) {
                currentMarker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_arrowautougasen));
            }
            currentMarker = marker;
            currentMarker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_autoselektovan));              
            return true;
        }
    });

 googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
        @Override
        public void onMapClick(LatLng latLng) {
            if(null != currentMarker) {
                currentMarker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_arrowautougasen));
            }
            currentMarker = null;
        }
    });

在这一行我从下面得到错误:

       if(null != currentMarker) {
                currentMarker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_arrowautougasen));
            }

这是一个例外:

 java.lang.IllegalArgumentException: Unmanaged descriptor
                                                                    at com.google.maps.api.android.lib6.common.k.b(:com.google.android.gms.DynamiteModulesB:162)
                                                                    at com.google.maps.api.android.lib6.impl.o.c(:com.google.android.gms.DynamiteModulesB:75)
                                                                    at com.google.maps.api.android.lib6.impl.db.a(:com.google.android.gms.DynamiteModulesB:334)
                                                                    at com.google.android.gms.maps.model.internal.q.onTransact(:com.google.android.gms.DynamiteModulesB:204)
                                                                    at android.os.Binder.transact(Binder.java:387)
                                                                    at com.google.android.gms.maps.model.internal.zzf$zza$zza.zzL(Unknown Source)
                                                                    at com.google.android.gms.maps.model.Marker.setIcon(Unknown Source)
                                                                    at ba.kordinata.kogps.live.map.MapFragment$5.onMapClick(MapFragment.java:212)

【问题讨论】:

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


【解决方案1】:

这就是我在 Google 地图上将 drawable 设置为 marker 的方式:

    mMap = googleMap;

    BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.your_drawable_here);
    LatLng sydney = new LatLng(-33.852, 151.211);
    MarkerOptions markerOptions = new MarkerOptions().position(sydney)
            .title("Marker in Sydney")
            .snippet("snippet snippet snippet snippet snippet...")
            .icon(icon);
    mMap.addMarker(markerOptions);

【讨论】:

  • 这会创建一个新图标。 OP 想知道如何更改现有标记
【解决方案2】:
final MarkerOptions marker=new MarkerOptions().position(loc);

marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker4));
mMap.addMarker(marker);

【讨论】:

    【解决方案3】:
    double latitude = 12.5044;
    double longitude = 60.6671;
    MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("MyMaps");
    marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.my_icon)));
    googleMap.addMarker(marker);
    

    【讨论】:

    • 这会创建一个新图标。 OP 想知道如何更改现有标记。
    【解决方案4】:
        public void onLocationChanged(Location location) {
            mLastLocation = location;
            if (currentLocationMarker != null) {
                currentLocationMarker.remove();
            }
    
            Log.d(Constant.TAG, "Location Changed");
    
            // resize bitmap
            //BitmapFactory.Options options = new BitmapFactory.Options();
            //options.inScaled = false;
            //currentBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.currentpos, options);
            //currentBitmap = SubUtils.scaleBitmap(currentBitmap, 60, 60);
    
            //Place current location marker
            LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
            //create marker
            MarkerOptions markerOptions = new MarkerOptions();
            //add position to marker
            markerOptions.position(latLng);
            //change icon marker
            markerOptions.icon(BitmapDescriptorFactory.fromBitmap(currentBitmap));
            //add marker to googleMap
            currentLocationMarker = googleMap.addMarker(markerOptions);
    
            // animate targer marker
            CameraPosition cameraPosition = new CameraPosition.Builder()
                    .target(latLng)
                    .zoom(15)
                    .build();
            //move the map to selected marker
            googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
        }
    

    【讨论】:

    • 这会创建一个新图标。 OP 想知道如何更改现有标记。
    猜你喜欢
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2018-02-16
    相关资源
    最近更新 更多