我有一个使用android-maps-utils和滑动标记图标的应用程序.
我收到了使用Firebase崩溃报告的错误报告,我无法在源代码中跟踪,因为它gms.maps.model.Marker.setIcon是私有的,所以我要求帮助解决这个问题.
问题的以下部分分为:
用户正在做什么
他在地图中放大和缩小(Fragment使用com.google.android.gms.maps.SupportMapFragment)
火灾基地崩溃向我报告了什么
异常java.lang.IllegalArgumentException:非托管描述符
com.google.maps.api.android.lib6.common.kb(:com.google.android.gms.DynamiteModulesB:162)
com.google.maps.api.android.lib6. impl.oc(:com.google.android.gms.DynamiteModulesB:75)
com.google.maps.api.android.lib6.impl.db.a(:com.google.android.gms.DynamiteModulesB:334)
com. google.android.gms.maps.model.internal.q.onTransact(:com.google.android.gms.DynamiteModulesB:204)
android.os.Binder.transact(Binder.java:387)
com.google.android.gms .maps.model.internal.zzf $ zza $ zza.zzL()com.google.android.gms.maps.model.Marker.setIcon()
co.com.spyspot.ui.content.sucursal.SucursalRender $ CustomSimpleTarget.onResourceReady (SucursalRender.java:156)co.com.spyspot.ui.content.sucursal.SucursalRender
$ CustomSimpleTarget.onResourceReady(SucursalRender.java:130)
com.bumptech.glide.request.GenericRequest.onResourceReady(GenericRequest.java:525)
com .bumptech.glide.request.GenericRequest.onResourceReady(GenericRequest.java:507)
com.bumptech.g lide.load.engine.EngineJob.handleResultOnMainThread(EngineJob.java:158)
com.bumptech.glide.load.engine.EngineJob.access $ 100(EngineJob.java:22)
com.bumptech.glide.load.engine.EngineJob $ MainThreadCallback .handleMessage(EngineJob.java:202)
android.os.Handler.dispatchMessage(Handler.java:98)
android.os.Looper.loop(Looper.java:148)
android.app.ActivityThread.main(ActivityThread.java:5443 )
java.lang.reflect.Method.invoke(Method.java)
com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:728)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java) :618)
和:
一些项目配置
SucursalRender extends DefaultClusterRenderer<Sucursal>)Glide.with(context).load(id).fitCenter().placeholder(R.drawable.ic_no_image).into(simpleTarget);这simpleTarget是我处理Glide下载/缓存的图像的地方.我发布了所有代码,simpleTarget因为崩溃是从那里开始的:
private class CustomSimpleTarget extends …Run Code Online (Sandbox Code Playgroud) 我已经想出了这篇文章,但它适用于已弃用的Google Maps API
http://tech.truliablog.com/2012/02/23/custom-map-markers-for-android-google-maps/
在新的API中,我找不到一个简单的方法来做到这一点.事实上,我根本做不到.
基本上我想在地图上将TextViews作为标记使用9Patch drawable作为文本的背景.Trulia仍然在他们当前的应用程序中使用新的API v2.你可以在这里查看

我怎样才能做到这一点?
android google-maps google-maps-markers google-maps-android-api-2
更新:我通过添加previousMarker对象解决了性能问题.因此,只有先前单击的标记将被删除并替换为默认图标.但是,当我单击标记时,信息窗口仍未显示.
我有一个地图视图并在其上设置了一些标记.我想要的是当我点击一个标记时,它将其图标更改为一个不同的图标,当我点击另一个标记时,前一个标记的图标应该更改为其原始图标.
我所做的就是这样,但只要我点击标记就会改变标记图标.
@Override
public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped.
LatLng markerPos=marker.getPosition();
String markerLocationName=marker.getTitle();
String markerSubCategoryName=marker.getSnippet();
marker.remove();
MarkerOptions markerOptions =
new MarkerOptions().position(markerPos)
.title(markerLocationName)
.snippet(markerSubCategoryName)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.new_icon));// Changing marker icon
mMap.addMarker(markerOptions);
Log.d("marker","change marker icon"); // can open a dialog window here
return false;
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我单击2个标记,我将显示2个新图标,同时我想要的只是当前单击的标记更改其图标.
所以我也做了类似的事情,增加了2行代码.它成功地做了我想要的但它有一些缺点(见下文).
@Override
public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped.
mMap.clear();
populateAllMarkersOnMap();//repopulate markers on map
LatLng markerPos=marker.getPosition();
String markerLocationName=marker.getTitle();
String markerSubCategoryName=marker.getSnippet();
marker.remove(); //remove …Run Code Online (Sandbox Code Playgroud) 我在更改googlemap上的googlemap标记时遇到麻烦。
这两种方法都不起作用
MarkerOptions markerOptions = new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(MarkerManager.getBitmapFromVectorDrawable(context, R.drawable.marker_no_issues)));
marker.setIcon(markerOptions.getIcon());
Run Code Online (Sandbox Code Playgroud)
也不是
marker.setIcon(BitmapDescriptorFactory.fromBitmap(MarkerManager.getBitmapFromVectorDrawable(context, R.drawable.marker_no_issues)));
Run Code Online (Sandbox Code Playgroud)
方法getBitmapFromVectorDrawable:
public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) {
Drawable drawable = AppCompatDrawableManager.get().getDrawable(context, drawableId);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
drawable = (DrawableCompat.wrap(drawable)).mutate();
}
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?为什么我不能使用setIcon方法更改标记图标。我也尝试过原始的.png文件,我知道矢量到位图的效果很好。