DrawText只在Jelly Bean 4.2上绘制一个字符串字符

时间:2012-12-12 23:24:52

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

好的,这让我疯了。我正在使用画布在我的应用程序中绘制一个仪表。它还会在散列标记上绘制数字,并在整个标尺上绘制一些水平文本。这一切都适用于所有版本的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问题与硬件加速有关。我只能在谷歌上找到一些关于4.2的Canvas问题的结果,但没有任何帮助我解决我的问题。我有什么想法可以解决这个问题并让文本正确显示?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

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