百度地图的Android SDK中支持在地图上添加各种覆盖物,其中包括文字覆盖物TextOptions,但目前版本4.1.0中此功能不支持文字换行,且不可设置文字的中心点,导致如果想要和其它覆盖物混合使用时,如在图标上显示一些文字时,效果很不好,由于只能通过对文字覆盖物的经纬度坐标添加一定的偏移来实现,例如下面这样:
// 定位坐标偏移 point = new LatLng(lat+0.0001, lng); OverlayOptions textOption = new TextOptions() .bgColor(0xAAFFFF00) .fontSize(24) .fontColor(0xFFFF00FF) .text("test "+formatter.format(date)) .position(point); // 在地图上添加该文字对象并显示 mBaiduMap.addOverlay(textOption);
可以看到由于中心点偏差导致的效果很不理想,为了解决这个问题,可以采用TextView渲染Bitmap然后添加为图标覆盖物的方式,这样既可以实现换行,也可以控制中心点,实现正常的地图视口旋转等效果,显示如下:
TextView textView = new TextView(MapFragment.this.getActivity()); textView.setGravity(Gravity.CENTER); // textView.setBackgroundResource(R.drawable.icon_gcoding); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); textView.setTextColor(Color.RED); textView.setShadowLayer(3, 0, 0, Color.BLACK); textView.setText("test\n"+formatter.format(date)+"\n"); textView.destroyDrawingCache(); textView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight()); textView.setDrawingCacheEnabled(true); Bitmap bitmapText = textView.getDrawingCache(true); BitmapDescriptor bd = BitmapDescriptorFactory.fromBitmap(bitmapText); OverlayOptions oo = new MarkerOptions().icon(bd). position(point); mBaiduMap.addOverlay(oo); bd.recycle();
博主友情提示:
如您在评论中需要提及如QQ号、电子邮件地址或其他隐私敏感信息,欢迎使用>>博主专用加密工具v3<<处理后发布,原文只有博主可以看到。