【问题标题】:Osmdroid insert text inside markerOsmdroid 在标记内插入文本
【发布时间】:2015-11-12 08:25:52
【问题描述】:

如何在 Osmdroid 标记内插入文本?假设我需要在地图上放置几个标记,每个标记里面应该有数字。 我怎样才能做到?我尝试#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);
}

【问题讨论】:

  • 您到底需要什么..?您需要与问题所附图片相同的内容吗?
  • 是的,但是每个标记的图标内的数字应该不同
  • 请添加一些您尝试过的代码..
  • 您在使用 settitle 方法时遇到了什么问题?
  • 当我使用 setTitle 方法时,数字添加到气球并仅在点击时显示,但我需要图标内的数字。

标签: android osmdroid


【解决方案1】:

此方法从您的资源中获取一个可绘制对象,在其上绘制一些文本并返回新的可绘制对象。您需要做的就是给它您的气泡的资源 ID,以及您想要在顶部的文本。然后,您可以将返回的可绘制对象传递到您想要的任何地方。

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 new BitmapDrawable(context.getResources(), bm);

这可以防止不希望的调整大小的可绘制对象。

【讨论】:

    【解决方案2】:

    你想看看 osmdroid 奖励包。

    网址:https://github.com/MKergall/osmbonuspack

    有很多带有文字的风格化气泡示例。

    【讨论】:

      【解决方案3】:

      The answer by Blue_Alien 不适用于 Kotlin 中的矢量可绘制对象。原因是由于BitmapFactory:返回错误。

      如果您使用 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)
      // https://stackoverflow.com/a/11121873
      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,它会返回icon

      return BitmapDrawable(context.resources, bitmap)
      

      【讨论】:

        猜你喜欢
        • 2019-06-03
        • 1970-01-01
        • 2014-06-24
        • 2014-07-13
        • 1970-01-01
        • 2017-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多