我想更改Google地图上的所选标记图标,因此我有以下代码:
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)
答案 0 :(得分:6)
这就是我在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);
答案 1 :(得分:1)
final MarkerOptions marker=new MarkerOptions().position(loc);
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker4));
mMap.addMarker(marker);
答案 2 :(得分:-1)
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);
答案 3 :(得分:-1)
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));
}