【问题标题】:DrawText only drawing one character of string on Jelly Bean 4.2DrawText 仅在 Jelly Bean 4.2 上绘制字符串的一个字符
【发布时间】:2012-12-12 23:24:52
【问题描述】:

好吧,这让我发疯了。我正在使用画布在我的应用程序中绘制仪表。它还在哈希标记上绘制数字,并在仪表上绘制一些水平文本。这一切都适用于所有版本的 Android 到 4.2。在 4.2 中,它只从它应该写的文本中绘制一个字符(看起来是中间字符)。例如,如果我的文本显示为 12345,它只写 3。如果它是一个两位数,它只绘制第一个数字。我在 4.2 模拟器和带有 4.2.1 的 Nexus 4 上看到了这种行为。我阅读了有关默认情况下打开硬件加速的所有信息,并且它会导致某些 Paint 和 Canvas 功能出现问题。我已插入代码以关闭 drawText 调用的硬件加速,但它没有帮助。

这是我的绘画代码:

titlePaint1 = new Paint();
titlePaint1.setColor(Color.WHITE);
titlePaint1.setAntiAlias(true);
titlePaint1.setTypeface(Typeface.DEFAULT_BOLD);
titlePaint1.setTextAlign(Paint.Align.CENTER);
titlePaint1.setTextSize(0.085f);

这是绘制文本所调用的方法:

@SuppressLint("NewApi")
private void drawTitle1(Canvas canvas) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        setLayerType(View.LAYER_TYPE_SOFTWARE, titlePaint1);

    canvas.drawText(title1, 0.5f, 0.72f, titlePaint1);
}

我将有效的画布传递给它,并且宽度和高度都是完美的。在该画布上绘制的其他所有内容都显示正常,并且在绘制仪表组件之前还有其他三个函数调用,如上面的那个。这只是drawText的问题。我知道这与 4.2 的变化有关,我认为这个 drawText 问题与硬件加速无关。我只能在 Google 上找到一些关于 4.2 版 Canvas 问题的结果,但没有什么能帮助我解决我的问题。有什么想法可以解决这个问题并让文本正确显示吗?

【问题讨论】:

  • 您的颜料与您的示例代码不匹配。会不会是这个问题?
  • 您使用的是 CENTER 文本对齐方式,这意味着它很可能是剪裁问题。您是否正确设置了剪辑矩形?它同时发生在软件和硬件上的事实似乎表明您的代码存在问题(两个管道使用完全不同的实现。)
  • @AedonEtLIRA 代码示例中没有匹配的 titlePaint 很糟糕。我正在尝试使用 titlePaint3,但 titlePaint1 是正确的,并且它们在代码中都匹配。
  • @RomainGuy 我什至在没有 CENTER 对齐的情况下尝试过,结果是一样的。实际上在使用 CENTER 对齐的 4.2 上,文本左对齐,没有它,它看起来居中(虽然,我认为它对齐到默认坐标的右侧)。如果坐标偏左,则一定是矩形裁剪问题。让我感到困惑的是它在 4.2 之前工作得很好,并且在其中绘制文本的矩形是仪表的大小,它至少为 300x300。我对 Android 的绘图方面不是很有经验,所以我无疑错过了一些东西。谢谢!
  • 我也有同样的问题:stackoverflow.com/questions/13941270/…

标签: android android-canvas android-4.2-jelly-bean


【解决方案1】:

感谢“Seraphim 的主人”在他们的帖子中回答这个问题。对于在 4.2.1 中遇到此问题的任何其他人,答案是在您的文本绘制中包含 setLinearText(true)。此方法显示为已弃用,但它是文本正确显示的唯一解决方案。

这是带有答案的帖子:https://stackoverflow.com/a/13971632/1017328

【讨论】:

【解决方案2】:

我强烈怀疑你遇到了我在这里报告的错误:http://code.google.com/p/android/issues/detail?id=40965

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 2011-10-16
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多