Текстовый контур Android имеет значительный разрыв для больших размеров шрифта, но только на одном из моих устройств

#android #drawtext

#Android #drawtext

Вопрос:

Я годами использую приведенный ниже метод (в различных формах) для отображения текста с контурами на холстах Android, и это никогда не вызывало у меня никаких проблем, пока я недавно не протестировал приложение на Samsung Galaxy Tab. При использовании текста большего размера становится очевидным, что между контуром и заполненным текстом имеется большой разрыв.

 public static void renderMessage(Canvas offScreenCanvas, String value, float inputXPos, float inputYPos, float textSize,
                                 boolean bold, boolean centreTextAroundLocation, int inputTextColour, int actualTextOutlineColour,
                                 float textOutlineStrokeWidth, final float standardStrokeWidth, Display display) {

    Paint paint = new Paint(){
        {
            setAntiAlias(true);
            setFilterBitmap(true);
            setStrokeWidth(standardStrokeWidth);
            setStyle(Paint.Style.FILL);
        }
    };

    if (bold) {
        paint.setTypeface(Typeface.DEFAULT_BOLD);
    }

    if (centreTextAroundLocation) {
        paint.setTextAlign(Paint.Align.CENTER);
    }

    paint.setTextSize(textSize);
    Rect bounds = new Rect();
    paint.getTextBounds(value, 0, value.length(), bounds);
    float actualHeight = (float)bounds.height();
    float actualWidth = (float)bounds.width();
    float xPos = inputXPos;
    float yPos = inputYPos;
    if (centreTextAroundLocation) {
        yPos = inputYPos - (paint.descent()   paint.ascent()) / 2.0f;
    }
    else {
        if (inputXPos == -1.0f) {
            xPos = (float)display.getWidth() / 2.0f - actualWidth / 2.0f;
        }

        if (inputYPos == -1.0f) {
            yPos = (float)display.getHeight() / 2.0f - actualHeight / 2.0f;
        }
    }

    if (actualTextOutlineColour != 0) {
        paint.setColor(actualTextOutlineColour);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(textOutlineStrokeWidth);
        offScreenCanvas.drawText(value, xPos, yPos, paint);
        paint.setStrokeWidth(standardStrokeWidth);
        paint.setStyle(Paint.Style.FILL);
    }

    paint.setColor(inputTextColour);
    offScreenCanvas.drawText(value, xPos, yPos, paint);
}
  

Буквально все другие мои тестовые устройства работают нормально, даже при сильно завышенных размерах шрифта. Это только Samsung Galaxy Tab, который выглядит как изображение ниже. Я перепробовал все варианты этого метода, какие только мог придумать, и я в тупике. Я понятия не имею, откуда берется этот разрыв.

введите описание изображения здесь

Комментарии:

1. Вы пробовали использовать свой пользовательский шрифт?