就在昨天看到gjz的一個庫的時候,遇到了一個大坑。其實說起來被某一篇文章給坑大了,本人也超喜歡gjz寫的一些庫文件,貌似有些崇拜了。
gjz的github:https://github.com/gjiazhe
庫地址:https://github.com/gjiazhe/MultiChoicesCircleButton
以前在canvas.drawText的時候總是沒有設置paint的align屬性,這里說一下如果你的paint.setTextAlign(Paint.Align.CENTER);
是這樣的話,那么你就要注意了canvas.drawText(String text, float x, float y, Paint paint)
的第二個和第三個參數了,x指的是文本的橫向的中點坐標,y指的是文本的baseLineY在屏幕上面的縱坐標。當時看到
final float baseLineY = mCircleCentreY - radius - textHeight / 2- (fontMetrics.descent - fontMetrics.ascent) / 2 - fontMetrics.ascent;
這樣去算出文字的baseLineY的值,后來去找資料fontMetrics.descent
和fontMetrics.ascent
都表示的是什么,
結果查到的文章是這樣的:
Ascent是baseline之上至字符最高處的距離
Descent是baseline之下至字符最低處的距離
說明圖.png
這個是網上的說明圖,我只是拿來用用,更為了好說明。如果都是距離的話
fontMetrics.descent - fontMetrics.ascent
這里就難得理解是文字占據的高度,這讓我很納悶。經過之后的debug測試后,發現fontMetrics.ascent
是一個負值,看到一個負值后,終于理解了gjz為啥是這么算出文本占據的高度了。