【问题标题】:text color too dark when drawing text on view canvas在视图画布上绘制文本时文本颜色太深
【发布时间】:2012-12-22 11:33:21
【问题描述】:

我使用以下代码在视图画布上绘制文本:

Paint paint = new Paint();
paint.setTextSize(14);
paint.setColor(0xFFFFFFFF);
paint.setAntiAlias(true);

@Override
public void onDraw(Canvas canvas){
   super.onDraw(canvas); 

   canvas.drawText("abcdef", 0, 0, paint);
}

问题:

文本以深灰色而不是白色 (0xFFFFFFFF) 显示。 为什么会这样?

我尝试使用 setShadowLayer() 或 paint.setAntiAlias(false) 来解决问题, 不幸的是没有成功。

【问题讨论】:

  • 使用 gimp 或 photoshop 获得您选择的确切颜色 :)
  • 问题不在于颜色代码。 0xFFFFFFFF 是白色的,我想用白色。然而,我的平板电脑的显示屏以灰色而不是白色显示文本。请不要现在提出建议,我应该增加我的平板电脑的对比度:-)

标签: android android-canvas drawtext


【解决方案1】:

在 res/value 中设置这个

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="white">#FFFFFF</color>
</resources>

然后将其放入您的代码中-

int myColor = context.getResources().getColor(com.example.test.R.color.white);
paint.setColor(myColor);

【讨论】:

  • 谢谢,但这并不能解决问题。您从 (xml) 资源中获取颜色信息。如果您从资源中获取颜色信息或在代码中手动设置它,这没有区别。您还有其他建议吗?
【解决方案2】:

您的油漆颜色(或 alpha?)必须在其他地方被修改。我实现你的代码如下,文字颜色为白色。

private void drawText() {
    LinearLayout layout = (LinearLayout) findViewById(R.id.main_view);
    if (layout != null){
        View myView = new MyView(this);
        myView.setBackgroundColor(Color.BLACK);
        layout.addView(myView, 300, 100);
    }
}

private class MyView extends View{

    public Paint paint;

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

        paint = new Paint();
        paint.setTextSize(25);
        paint.setColor(0xFFFFFFFF);
        paint.setAntiAlias(true);
    }

    @Override
    protected void onDraw(Canvas canvas){
           super.onDraw(canvas); 
           canvas.drawText("abcdef", 0, 25, paint);
    }
}

【讨论】:

    【解决方案3】:

    我不确定 android 是否支持这种颜色的十六进制代码 (0xFFFFFFFF),将 0x 替换为 # of 0xFFFFFFFF 并使用

    paint.setColor(Color.parseColor("#FFFFFFFF"));
    

    而不是

    paint.setColor(0xFFFFFFFF);
    

    希望对你有所帮助。

    【讨论】:

    • 是的,Android 支持十六进制颜色代码。 Color.parseColor() 这里不需要。我测试了你的建议,很遗憾没有成功。
    【解决方案4】:

    这样的颜色设置代替你的代码使用这个

            Paint Paint = new Paint();
            Paint.setAntiAlias(true);
            Paint.setDither(true);
            Paint.setColor(Color.WHITE);
            Paint.setStyle(Paint.Style.STROKE);
            Paint.setStrokeJoin(Paint.Join.ROUND);
            Paint.setStrokeCap(Paint.Cap.ROUND);
            Paint.setStrokeWidth(10);
    

    这里是很好的例子blogspot.in

    【讨论】:

    • 谢谢,我已经测试了你的建议,但效果还是一样。文本显示为灰色而不是白色。
    【解决方案5】:

    经过一番调查,我发现了问题和解决方法:

    我的错误是,除了 onDraw() 方法之外,我还在子视图中使用了半透明背景颜色 setBackgroundColor(0x88000000),这导致了奇怪的结果,即灰色文本颜色而不是白色文本颜色。当我从子视图中删除方法 setBackgroundColor() 时,文本颜色现在为白色。

    感谢大家的想法和建议!

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 2012-03-04
      • 1970-01-01
      相关资源
      最近更新 更多