Osmdroid 在标记内插入文本
Osmdroid insert text inside marker
我怎样才能在里面插入文字Osmdroid marker? Suppose i need place several markers on map, and each marker should have number inside it. 我怎样才能做到?我尝试 #setTitle()
方法,但它会将文本放在气球中。
更新:
for(int i = 0; i < orders.size(); i++) {
mOrderPoint = orders.get(i).getStart();
final Order order = orders.get(i);
Marker orderMarker = new Marker(mMap);
orderMarker.setIcon(ContextCompat.getDrawable(mContext,R.drawable.order_pin));
orderMarker.setPosition(mOrderPoint);
}
此方法从您的资源中获取一个可绘制对象,在其上绘制一些文本,然后 return创建新的可绘制对象。您需要做的就是给它您的气泡的资源 ID,以及您想要在顶部显示的文本。然后你可以将 returned 可绘制对象传递到任何你想要的地方。
public BitmapDrawable writeOnDrawable(int drawableId, String text){
Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId).copy(Bitmap.Config.ARGB_8888, true);
Paint paint = new Paint();
paint.setStyle(Style.FILL);
paint.setColor(Color.BLACK);
paint.setTextSize(20);
Canvas canvas = new Canvas(bm);
canvas.drawText(text, 0, bm.getHeight()/2, paint);
return new BitmapDrawable(bm);
}
注:
为了保持密度你需要这个构造函数
BitmapDrawable (Resources res, Bitmap bitmap)
所以,根据上下文,最后一个 return 应该是这样的
return new BitmapDrawable(context.getResources(), bm);
这可以防止不希望的调整大小的可绘制对象。
您想查看 osmdroid 奖励包。
网站:https://github.com/MKergall/osmbonuspack
有很多带有文字的程式化气泡示例。
不适用于 Kotlin 中的矢量可绘制对象。原因是 BitmapFactory
:它 return 是一个错误。
如果您使用 kotlin 编程,有一个比使用 BitmapFactory
.
简单得多的解决方案
首先,获取drawable:
val drawable = ContextCompat.getDrawable(context, R.drawable.order_pin)!!
然后简单地使用toBitmap()
函数:
val bitmap = drawable.toBitmap()
然后其余的解决方案实际上是相同的。
最终代码:
val drawable = ContextCompat.getDrawable(context, R.drawable.order_pin)!!
val bitmap = drawable.toBitmap()
val paint = Paint();
paint.style = Style.FILL
paint.color = Color.BLACK
paint.textSize = 20
val canvas = Canvas(bitmap)
// Note, this code places the text in the center of the Bitmap (both vertically and horizontally)
//
canvas.drawText(text, bm.width / 2f,
bm.height / 2f - (paint.descent() + paint.ascent() / 2), paint)
val iconWithText = BitmapDrawable(context.resources, bitmap)
// Marker has to be initialised somewhere in your code
marker.icon = iconWithText
当然,此代码仅供一次性使用。如果你想把它移动到一个函数,参数可以是 drawable 或 drawableID,它会 return icon
:
return BitmapDrawable(context.resources, bitmap)
我怎样才能在里面插入文字Osmdroid marker? Suppose i need place several markers on map, and each marker should have number inside it. #setTitle()
方法,但它会将文本放在气球中。
更新:
for(int i = 0; i < orders.size(); i++) {
mOrderPoint = orders.get(i).getStart();
final Order order = orders.get(i);
Marker orderMarker = new Marker(mMap);
orderMarker.setIcon(ContextCompat.getDrawable(mContext,R.drawable.order_pin));
orderMarker.setPosition(mOrderPoint);
}
此方法从您的资源中获取一个可绘制对象,在其上绘制一些文本,然后 return创建新的可绘制对象。您需要做的就是给它您的气泡的资源 ID,以及您想要在顶部显示的文本。然后你可以将 returned 可绘制对象传递到任何你想要的地方。
public BitmapDrawable writeOnDrawable(int drawableId, String text){
Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId).copy(Bitmap.Config.ARGB_8888, true);
Paint paint = new Paint();
paint.setStyle(Style.FILL);
paint.setColor(Color.BLACK);
paint.setTextSize(20);
Canvas canvas = new Canvas(bm);
canvas.drawText(text, 0, bm.getHeight()/2, paint);
return new BitmapDrawable(bm);
}
注:
为了保持密度你需要这个构造函数
BitmapDrawable (Resources res, Bitmap bitmap)
所以,根据上下文,最后一个 return 应该是这样的
return new BitmapDrawable(context.getResources(), bm);
这可以防止不希望的调整大小的可绘制对象。
您想查看 osmdroid 奖励包。
网站:https://github.com/MKergall/osmbonuspack
有很多带有文字的程式化气泡示例。
BitmapFactory
:它 return 是一个错误。
如果您使用 kotlin 编程,有一个比使用 BitmapFactory
.
首先,获取drawable:
val drawable = ContextCompat.getDrawable(context, R.drawable.order_pin)!!
然后简单地使用toBitmap()
函数:
val bitmap = drawable.toBitmap()
然后其余的解决方案实际上是相同的。
最终代码:
val drawable = ContextCompat.getDrawable(context, R.drawable.order_pin)!!
val bitmap = drawable.toBitmap()
val paint = Paint();
paint.style = Style.FILL
paint.color = Color.BLACK
paint.textSize = 20
val canvas = Canvas(bitmap)
// Note, this code places the text in the center of the Bitmap (both vertically and horizontally)
//
canvas.drawText(text, bm.width / 2f,
bm.height / 2f - (paint.descent() + paint.ascent() / 2), paint)
val iconWithText = BitmapDrawable(context.resources, bitmap)
// Marker has to be initialised somewhere in your code
marker.icon = iconWithText
当然,此代码仅供一次性使用。如果你想把它移动到一个函数,参数可以是 drawable 或 drawableID,它会 return icon
:
return BitmapDrawable(context.resources, bitmap)