Intereting Posts
Android BroadcastReceiver, автоматический запуск службы после перезагрузки устройства Как получить функции устройства Android с помощью диспетчера пакетов Как textView.setText из Thread? Чтение даты REST WCF от android Ошибка: не удалось найти com.google.gms: google-services: 1.0. При добавлении плагина Google Плагина в build.gradle в студии android Android обратный модем или доступ к локальной сети или интернету с использованием USB-кабеля Как стиль PopupMenu? Дооснащение 2 – тело нулевого ответа Mockito mocks запускает реальный код Android в Lollipop или больше Android: плавающая кнопка Clickable через экран? Android: панель действий по умолчанию заполняется во время загрузки приложения Портретная ориентация камеры Android: gravity = "right" не работает на всех устройствах для арабского и других языков RTL Сделайте видео в формате TextureView (его части находятся вне (не видно)), используя MediaPlayer Выберите номер и имя из списка контактов в приложении Android

Android 4.2.1 неправильный кернинг персонажа (интервал)

При использовании метода Canvas и drawText() я вижу другой рендеринг на Android 4.2.1.

Ниже 4.2:

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

Для Android 4.2.1 (Nexux 7) я получаю:

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

Как вы можете видеть текст Потребление очень плотно. Кажется, это проблема кернинга, представленная в 4.2.1. Краска, используемая для рисования текста, не имеет ничего особенного:

 titlePaint = new Paint(); titlePaint.setAntiAlias(true); titlePaint.setColor(0xffffffff); titlePaint.setTextSize(0.125f); titlePaint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); titlePaint.setTextAlign(Align.CENTER); titlePaint.setLinearText(true); 

Если я не использую titlePaint.setLinearText(true) я получаю странный результат в 4.2.1, как вы можете видеть там:

Android 4.2 на Nexus 7: canvas.drawText () работает неправильно

РЕДАКТИРОВАТЬ:

Это странное поведение было сообщено команде Android: http://code.google.com/p/android/issues/detail?id=39755, но это все еще не является «официальной» проблемой.

EDIT (2):

Некоторые слухи утверждают, что проблема заключается в textSize <1.0f …

Solutions Collecting From Web of "Android 4.2.1 неправильный кернинг персонажа (интервал)"

Обходной путь, который я использую сейчас:

 scalePaint.setTextSize(1.5f); 

Затем, в методе onDraw:

 canvas.save(); canvas.scale(0.01f, 0.01f); canvas.drawText(""+i, 0.5f*100, 0.8f*100, scalePaint); canvas.restore(); 

Как вы можете видеть, я отменяю позицию текста, поэтому он должен быть таким, каким он должен быть.

Я отвечаю на свой вопрос после принятия единственного ответа, который предложил обходной путь для моей конкретной проблемы. Это может быть «хорошим» и «окончательным» решением:

 public static void drawTextOnCanvasWithMagnifier(Canvas canvas, String text, float x, float y, Paint paint) { if (android.os.Build.VERSION.SDK_INT <= 15) { //draw normally canvas.drawText(text, x, y, paint); } else { //workaround float originalTextSize = paint.getTextSize(); final float magnifier = 1000f; canvas.save(); canvas.scale(1f / magnifier, 1f / magnifier); paint.setTextSize(originalTextSize * magnifier); canvas.drawText(text, x * magnifier, y * magnifier, paint); canvas.restore(); paint.setTextSize(originalTextSize); } } 

Это ошибка в Android, и, пока она уже отправлена ​​на отслеживание ошибок, вы можете добавить +1 к ней, чтобы получить некоторое внимание: проблема 39755