tutorial studio drawtextonpath drawcircle android paint text-size

studio - Android: measureText() Píxeles de retorno basados en píxeles escalados



drawtextonpath android (4)

Así que utilizo el método measureText () de Paint para medir el ancho de un segmento de texto, pero quería medir el texto en función de un determinado tamaño de texto. Digamos que quería obtener el ancho de un segmento de texto que tendrá 20 píxeles escalados cuando ocupe un cierto TextView. Intenté lo siguiente:

Paint paint = new Paint(); paint.setTextSize(20); paint.measureText("sample text");

Sin embargo, no parece estar funcionando. Creo que está devolviendo un ancho con respecto a un tamaño de texto más pequeño. Siento que me estoy perdiendo algo que me hará abofetearme y gritarle a Herp Derp.


Hago algo como esto cuando tengo que hacerlo.

int textSize = 20; for(int i = 2; i<18 && curTextSize< textSize;i+=2) { this.label.setTextSize(i); curTextSize = this.label.getPaint().measureText(this.label.getText().toString()); }


Necesitas obtener el densityMultiplier así:

final float densityMultiplier = getContext().getResources().getDisplayMetrics().density; final float scaledPx = 20 * densityMultiplier; paint.setTextSize(scaledPx); final float size = paint.measureText("sample text");


No tengo suficientes puntos de reputación para comentar las respuestas, pero en referencia a los comentarios de @schwiz y @AndreasEK sobre la respuesta aceptada:

measureText() , junto con getTextBounds() , no incluye el relleno, por lo que es posible que la solución a su problema sea agregar el relleno izquierdo y derecho (o comenzar y finalizar el relleno)

final float scaleFactor = getContext().getResources().getDisplayMetrics().density; final float scaledPx = 20 * scaleFactor; paint.setTextSize(scaledPx); final float padding = scaleFactor * (textView.getPaddingStart() + textView.getPaddingEnd()); final float size = paint.measureText("sample text") + padding;


Tratar

Paint.SetLinearText(true)

Eso me solucionó el problema.