2016-12-06 12 views
3

マップマーカーにテキストを配置しようとしていますが、常にその下に表示されます。 最初にdrawableをビットマップに変換し、それにテキストを描画します。 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を描画可能なを使用して考えがあります動作しますporterduff方法の概要を参照してください? –

+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 

ここ enter image description here

+0

よく練習してください。答えは –

+0

ありがとうございましたが、十分ではないようです。私は何かが欠けている – arsena

+0

何が重要なのは、図面の順序を確認することです –

関連する問題