2016-12-06 38 views
3

我試圖將文本放在地圖標記上,但它總是出現在它下面。 首先,我將drawable轉換爲位圖,然後在其上繪製文本。繪製到位圖轉換工作正常,我只有一個文本覆蓋問題。通過位圖繪製文本

enter image description here

我已經嘗試了這些:

  1. Adding text to a bitmap in memory in Android
  2. https://stackoverflow.com/a/7328777/3423468
  3. https://stackoverflow.com/a/8831182/3423468

,還有更多沒有運氣。

這是我目前的方法:

Bitmap drawableToBitmap(Drawable drawable) 
    { 
     var bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
     var canvas = new Canvas(bitmap); 
     if (shouldDrawText) 
     { 
      Paint paint = new Paint(); 
      paint.setColor(Color.WHITE); 
      paint.setStrokeWidth(40); 
      paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); // Text Overlapping Pattern 

      //canvas.drawBitmap(bitmap, 0, 0, paint); 
      canvas.drawText("Testing...", 10, 10, paint); 
     } 
     drawable.SetBounds(0, 0, canvas.Width, canvas.Height); 
     drawable.Draw(canvas); 
     return bitmap; 
    } 

任何想法我做錯了嗎?

+0

你有使用可繪製的'複合drawable' ** **裏面TextView的認爲是一個概述? –

+0

是的,但只要我需要地圖標記,我就跳過它。 – arsena

+0

請問您如何解決此問題的任何更新? – Andriy

回答

2
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); // Text Overlapping Pattern 

在這裏你使用SRC_OVER,這意味着源將在DST之下。 DST是要繪製的新像素。

您應該使用DST_OVER在舊像素之上繪製新像素。

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER)); // Text Overlapping Pattern 

在這裏看到的是如何porterduff工作 enter image description here

+0

精心製作。向前移動 –

+0

感謝您的回答,但似乎不夠。我錯過了一些東西 – arsena

+0

還有一點很重要的是驗證繪圖的順序 –