关于地图Marker
在使用地图中,不管是百度地图还是高德地图,我们在搜索相关地方的时候都会显示覆盖物,如,但是我们一般里面都会带values,如1,2,3,4,5,6,7,8,9,10…..等等如此所示,如何去现实出来呢?有两种解决方案:
- 可以再放置这么多的资源图片,但是若是marker非常多,这岂不是非常麻烦,而且会导致资源文件异常臃肿,还有就是哪天,又变更需求了呢??
- 自己画一个带values的图片资源就可以了,代码如下:
带有value的bitmap资源
private Bitmap imgMarker;
private int width,height; //图片的高度和宽带
private Bitmap imgTemp; //临时标记图
private Drawable createDrawable(int letter) {
imgTemp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(imgTemp);
Paint paint = new Paint(); // 建立画笔
paint.setDither(true);
paint.setFilterBitmap(true);
Rect src = new Rect(0, 0, width, height);
Rect dst = new Rect(0, 0, width, height);
canvas.drawBitmap(imgMarker, src, dst, paint);
Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG
| Paint.DEV_KERN_TEXT_FLAG);
textPaint.setTextSize(20.0f);
textPaint.setTypeface(Typeface.DEFAULT_BOLD); // 采用默认的宽度
textPaint.setColor(Color.WHITE);
canvas.drawText(String.valueOf(letter), width /2-5, height/2+5,
textPaint);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
return (Drawable) new BitmapDrawable(getResources(), imgTemp);
}
接下来我们把他转换成drawable
public static Bitmap drawableToBitmap(Drawable drawable) {
Bitmap bitmap = Bitmap.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
在这里我用的是高德地图,动态添加覆盖物
/** 添加地图标注物*/
private void addMarkers()
{
//int resId[] = new int[]{R.drawable.ic_marker1,R.drawable.ic_marker2,R.drawable.ic_marker3,R.drawable.ic_marker4,R.drawable.ic_marker5,R.drawable.ic_marker6,R.drawable.ic_marker7,R.drawable.ic_marker8,R.drawable.ic_marker9,R.drawable.ic_marker10};
ArrayList<Drawable> drawables = new ArrayList<>();
for(int i = 0; i < ListLocationBean .size(); i++){
drawables.add(createDrawable(i));
}
for (int i = 0; i < ListLocationBean .size(); i++)
{
ListLocationBean bean = ListLocationBean .get(i);
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(new LatLng(bean.lat, bean.lng));
markerOptions.title(bean.supplier_name);
markerOptions.snippet(i+"");
// 之前直接添加资源
//markerOptions.icon(BitmapDescriptorFactory.fromResource(resId[i]));
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(drawableToBitmap(drawables.get(i)))); //动态添加资源
LogUtils.e("result =size "+markerOptions+"-----------------------"+i);
Marker marker = aMap.addMarker(markerOptions);
marker.setDraggable(true);
}
}