【问题标题】:Draw Text Over Bitmap在位图上绘制文本
【发布时间】:2016-12-06 08:45:26
【问题描述】:

我正在尝试将文本放在地图标记上,但它总是出现在其下方。 首先我将drawable转换为位图,然后在其上绘制文本。可绘制位图转换工作正常,我只有文本覆盖的问题。

我已经尝试过这些:

  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;
    }

任何想法我做错了什么?

【问题讨论】:

  • 您是否考虑过将可绘制对象用作compound drawable inside TextView?
  • 是的,但只要我需要它作为地图标记,我就跳过它。
  • 请问您如何解决此问题的任何更新?

标签: android bitmap android-drawable


【解决方案1】:
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 工作原理的概述

【讨论】:

  • 精心制作。继续前进
  • 感谢您的回答,但似乎还不够。我错过了一些东西
  • 同样重要的是要验证绘制的顺序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
相关资源
最近更新 更多