【发布时间】:2019-04-08 19:53:53
【问题描述】:
我以github上的代码(不是我的代码)为例 https://github.com/mitchtabian/Google-Maps-2018/tree/displaying-trip-duration-of-polylines-end
这是我的问题:
- 假设有一些用户(标记)。
- 我想把marker的图标换成网上的另一张图片,但是不行。
我有两个问题:
-
onBeforeClusterItemRendered()方法不显示图像。 如果我像原始示例一样使用资源中的图像,那么它可以工作。 -
setUpdateMarker()方法仅更改一个标记上的两个图像,而不是显示每个标记上的图像。@Override protected void onBeforeClusterItemRendered(ClusterMarker item, MarkerOptions markerOptions) { super.onBeforeClusterItemRendered(item, markerOptions); Bitmap mIcon = null ; try { InputStream in = new URL(item.getIconPath()).openStream(); mIcon = BitmapFactory.decodeStream(in); imageView.setImageBitmap(mIcon); Bitmap icon = iconGenerator.makeIcon(); markerOptions.icon( BitmapDescriptorFactory.fromBitmap(icon)).title(item.getTitle()); } catch (Exception e) { e.printStackTrace(); } } public void setUpdateMarker(ClusterMarker clusterMarker) { marker = getMarker(clusterMarker); if (marker != null) { marker.setPosition(clusterMarker.getPosition()); new DownloadImageTask().execute(clusterMarker.getIconPath()); } } private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { @Override protected Bitmap doInBackground(String... urls) { Bitmap mIcon = null; try { InputStream in = new URL(urls[0]).openStream(); mIcon = BitmapFactory.decodeStream(in); } catch (Exception e) { e.printStackTrace(); } return mIcon; } @Override protected void onPostExecute(Bitmap result) { if (marker!=null && result != null) { Bitmap resizedBitmap = Bitmap.createScaledBitmap(result, markerWidth, markerHeight, false); marker.setIcon( BitmapDescriptorFactory.fromBitmap(resizedBitmap)); } } }
更新:我也展示了这个类的构造函数:
public class MyClusterManagerRenderer extends DefaultClusterRenderer<ClusterMarker> {
private static final String TAG = " ClusterManagerRenderer";
private final IconGenerator iconGenerator;
private final ImageView imageView;
private final int markerWidth;
private final int markerHeight;
private final int padding;
private Marker marker;
public MyClusterManagerRenderer(Context context, GoogleMap googleMap,
ClusterManager<ClusterMarker> clusterManager) {
super(context, googleMap, clusterManager);
// initialize cluster item icon generator
iconGenerator = new IconGenerator(context.getApplicationContext());
imageView = new ImageView(context.getApplicationContext());
markerWidth = (int) context.getResources().getDimension(R.dimen.custom_marker_image);
markerHeight = (int) context.getResources().getDimension(R.dimen.custom_marker_image);
imageView.setLayoutParams(new ViewGroup.LayoutParams(markerWidth, markerHeight));
padding = (int) context.getResources().getDimension(R.dimen.custom_marker_padding);
imageView.setPadding(padding, padding, padding, padding);
iconGenerator.setContentView(imageView);
}
【问题讨论】:
标签: java android google-maps