Montare un rettangolo intorno a una stringa su una tela Android
-
26-10-2019 - |
Domanda
uso Così ho Canvas.drawText per disegnare una stringa su un Canvas . Il problema è che voglio disegnare un rettangolo prima di esso in modo che le appare testo centrato sul rettangolo. Ma mi ha colpito un problema reale. La dotazione x e y coordinate drawText in realtà non sono del " alto a sinistra " angolo del testo vero , ma piuttosto sulla linea in cui i personaggi iniziano. C'è un metodo Paint.getTextBounds che restituisce un rettangolo "con l'origine implicita" a (0,0) del testo che sarebbe disegnato. Il problema è che l'origine è a (0,0) . La larghezza e l'altezza di quella scatola sono corrette, ma non so come posizionare l'angolo in alto a sinistra in alto a sinistra della stringa che viene disegnato sulla tela. Credo che dovrei usare FontMetrics , ma dal momento che molti dei valori FontMetrics i rendimenti sono privi di documenti che non sono davvero sicuro come usarli per il mio scopo.
Soluzione
ho finito per fare
FontMetrics fm = new FontMetrics();
paint.setTextAlign(Paint.Align.CENTER);
paint.getFontMetrics(fm);
canvas.drawText(text, x, y + -(fm.ascent + fm.descent) / 2, paint);
che in realtà disegna il testo centrato a x , y . Prima che io disegnare un rettangolo centrato a x , y con la larghezza di paint.measureText ( testo )
Altri suggerimenti
provare a disegnare rettangolo utilizzando
canvas.drawRect(x, y - Paint.GetTextSize(), x + Paint.measureText("text"), y, Paint);