canvas.drawText()无法正常工作:在Nexus 7的Android 4.2canvas

2019-05-12 03:33发布

我面对我的申请一个严重的问题,在谷歌Play发布,显然做工精细Android上的所有版本,除了> 4.0。

这是我的Android 4.0 HTC手机screenshoot:

这是我得到的Nexus 7,Android的4.2.1(在模拟器中相同的行为):

我看到使用所绘制的文本相同的行为canvas.drawText()

用于绘制文本的涂料是:

paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(color); //some color
paint.setTextSize(size); //some size
paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
paint.setTextAlign(Align.CENTER);

在logcat的(4.2.1仿真器)我看到了很多的

12-18 20:42:21.096: W/Trace(276): Unexpected value from nativeGetEnabledTags: 0

我使用清单这些设置:

 <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />

Answer 1:

我回答了很多谷歌搜索后,我自己的问题...

诀窍在于使用setLinearText(true)为用于绘制文本喷漆的对象。 现在,一切都看起来不错。

paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(color);
paint.setTextSize(size);
paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
paint.setTextAlign(Align.CENTER);
paint.setLinearText(true);

在这里,我节省了一天的链接:

http://gc.codehum.com/p/android/issues/detail?id=39755

我希望它可以帮助someonelse。

该文本不是在最好的尚未呈现:

编辑(14/01/2013)

我还在(仅限于4.2.1)面临的一个开云集团的问题。 请在这里看到我的其他问题:

安卓4.2.1错误字符字距(间距)

编辑(2013年5月2日)

我看到另外一个项目有同样的问题。 看看下面的链接:

http://mindtherobot.com/blog/272/android-custom-ui-making-a-vintage-thermometer/

如果您运行在Nexus 4.2.1样品(或模拟器的Android 4.2),你会得到相同的“奇怪”的文字...

编辑(20/02/2013)

研究发现,不使用一个替代方案setLinearText(true) ,看这里:

安卓4.2.1错误字符字距(间距)



Answer 2:

安卓4.0默认为硬件加速开启。 一些绘图功能无法正常使用此努力。 不记得哪些确切,但尝试关闭硬件加速关闭清单文件,看看它是否有差别。

当然,这可能不是原因,但它值得一试。



Answer 3:

我有一个类似的问题,努力使自定义字符间距一个观点,所以我只是做这2种方法,希望有人发现他们有帮助。

/**
 * Draws a text in the canvas with spacing between each letter.
 * Basically what this method does is it split's the given text into individual letters
 * and draws each letter independently using Canvas.drawText with a separation of
 * {@code spacingX} between each letter.
 * @param canvas the canvas where the text will be drawn
 * @param text the text what will be drawn
 * @param left the left position of the text
 * @param top the top position of the text
 * @param paint holds styling information for the text
 * @param spacingPx the number of pixels between each letter that will be drawn
 */
public static void drawSpacedText(Canvas canvas, String text, float left, float top, Paint paint, float spacingPx){

    float currentLeft = left;

    for (int i = 0; i < text.length(); i++) {
        String c = text.charAt(i)+"";
        canvas.drawText(c, currentLeft, top, paint);
        currentLeft += spacingPx;
        currentLeft += paint.measureText(c);
    }
}

/**
 * returns the width of a text drawn by drawSpacedText
 */
public static float getSpacedTextWidth(Paint paint, String text, float spacingX){
    return paint.measureText(text) + spacingX * ( text.length() - 1 );
}


文章来源: Android 4.2 on Nexus 7: canvas.drawText() not working correctly