【问题标题】:Painting text over background image is dim在背景图像上绘制文本是暗淡的
【发布时间】:2013-09-08 18:25:53
【问题描述】:

我正在画布上的背景图像上绘制文本。我以交互方式移动图像(如占卜板指针)。我已将画布设置为黑色,指针为红色,我想在上面写白色文本,以便指针上有玩家的名字。

在 Android 2.3.4 中,它在红色指针顶部显示为纯白色文本,非常清晰,但我想使用任何颜色。在 Android 4.1.2 中,我几乎看不到白色文字。这是我的代码:

    public Pointer(Context context) {
    super(context);

    paintBg = new Paint();
    paintBg.setColor(Color.BLACK);
    paintName = new Paint();
    paintName.setColor(Color.WHITE);
    paintName.setTextSize(50); // set text size
    paintName.setStrokeWidth(5);
    paintName.setTextAlign(Paint.Align.CENTER);

    this.setImageResource(res); // pointer.png in res/drawable folder
    Drawable d = getResources().getDrawable(res);
    h = d.getIntrinsicHeight();
    w = d.getIntrinsicWidth();

    canvas = new Canvas();
    canvas.drawPaint(paintBg);//make background black

    // float imageScale = width / w; // how image size scales with screen
}


@Override
public void onDraw(Canvas canvas) {

    y = this.getHeight() / 2; // center of screen
    x = this.getWidth() / 2;
    int left = Math.round(x - 0.8f * w);
    int right = Math.round(x + 0.8f * w);

    canvas.save();
    canvas.rotate((direction + 180) % 360, x, y); // rotate to normal
    canvas.drawText(s, x, y + 20, paintName); // draw name

    canvas.restore();
    canvas.rotate(direction, x, y); // rotate back
    super.onDraw(canvas);
}

4.1.2 中的哪些变化会影响这一点,或者我做错了什么?感谢您对此的帮助,因为它让我发疯了。

编辑以包含屏幕截图:

Android 2.3.4

安卓 4.1.2

注意白色文本在 2.3.4 中如何显示在顶部,而在 4.1.2 中显示在下方或浑浊。

正如 free3dom 指出的那样,它与 alpha 有关。我确实更改了 alpha,因为如果我不更改,文本不会出现在箭头顶部。看起来具有指针图像的 ImageView 总是在顶部 - 这可能是怎么回事? 以下是我处理设置 alpha 的方式:

    public static void setAlpha(View view, float alpha, int duration) {
if (Build.VERSION.SDK_INT < 11) {
    final AlphaAnimation animation = new AlphaAnimation(alpha, alpha);
    animation.setDuration(duration);
    animation.setFillAfter(true);
    view.startAnimation(animation);
 } else                          //for 11 and above
    view.setAlpha(alpha);
}

也许它与使用 this.setImageResource(res) 设置图像资源有关?根据 android developer guide,我只能将 alpha 设置为单个视图,并且视图中的所有内容都会更改。然而,如果我降低 alpha,箭头图像似乎变得足够透明,可以让我看到文本。

【问题讨论】:

  • 根据新信息,您的渲染顺序似乎是问题所在。有没有办法让您在渲染文本之前渲染箭头
  • 箭头在创建 imageview 类时被实例化。之后在该类的 onDraw 方法中完成所有文本写入。我查看了开发人员文档,但看不到如何控制渲染顺序。很郁闷...
  • 您是否尝试过将super.onDraw(canvas); 移动到您的onDraw 方法的顶部?
  • 刚试过。文字出现在顶部!但现在箭头不动,他们需要一起移动。不过好主意。我曾尝试使用动画来移动箭头,但在将其动画化为一个图像之前绘制名称时找不到构建它的方法。
  • 然后可能只是在 super.onDraw() 调用之前复制画布的转换,然后对文本再次执行 - 这可能是多余的,但有时这就是完成工作的方法:)

标签: android text canvas drawtext


【解决方案1】:

您设置了笔触宽度,但从未指出该笔触应用于Paint

尝试添加

paintName.setStyle( FILL_AND_STROKE );

【讨论】:

  • 感谢 free3dom。这增强了 2.3.4 上的文本,但对使它在 4.1.2 中的背景指针顶部更清晰地显示没有影响。 4.1.2 肯定有什么我做错了。
  • 尝试使用setSubpixelText() 看看这是否对 4.1.2 有影响。此外,4.1.2 中问题的屏幕截图将有助于识别问题。
  • 我试图发布截图,但我没有足够的声望点:( 设置 setSubpixelText(isEnabled) 没有任何区别。
  • 在此处的评论中发布屏幕截图的链接(添加一些空格/其他内容,以便它看起来不像链接,如果需要)然后我将编辑您的问题并添加屏幕截图。跨度>
  • 好的,我已将图片添加到您的帖子中。从外观上看,它似乎与不透明度有关。尝试在paintName.setColor(Color.WHITE); 之后添加paintName.setAlpha(255);。交替使用paintName.setARGB(255,255,255,255) 而不是这两个调用。
猜你喜欢
  • 2016-10-05
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
相关资源
最近更新 更多