커스텀 뷰를 만들어 쓸때 drawText로 문자를 출력한다.
그런데 문자 위치가 살짝 밑으로 치우쳐 있는 느낌을 받곤 한다.
처음엔 기분탓이라고 생각했지만... 계속된 찝찝함에 확인해 보니...
아주 미세하게 아래로 내려와 있다는 사실을 깨달았다.
한 예이다.
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
val rect = RectF(100f, 100f, 300f, 300f)
val rectPaint = TextPaint().apply {
flags = Paint.ANTI_ALIAS_FLAG
color = Color.LTGRAY
}
val text = "Test"
val textPaint = TextPaint().apply {
flags = Paint.ANTI_ALIAS_FLAG
color = Color.BLACK
textSize = 100f
}
canvas.drawRect(rect, rectPaint)
canvas.drawText(text, rect.left, rect.bottom, textPaint)
}
출력 결과는 이렇다. 빨간색 원으로 표시한 부분을 자세히 보면 1픽셀정보 삐져 나와 있다.
해결 방법은 문자의 bound를 얻어 bottom 만큼 빼주는 것이다.
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
val rect = RectF(100f, 100f, 300f, 300f)
val rectPaint = TextPaint().apply {
flags = Paint.ANTI_ALIAS_FLAG
color = Color.LTGRAY
}
val text = "Test"
val textPaint = TextPaint().apply {
flags = Paint.ANTI_ALIAS_FLAG
color = Color.BLACK
textSize = 100f
}
/* 추가 */
val textRect = Rect()
textPaint.getTextBounds(text, 0, text.length, textRect)
canvas.drawRect(rect, rectPaint)
canvas.drawText(text, rect.left, rect.bottom - textRect.bottom/* 추가 */, textPaint)
}
자! 딱맞게 문자가 출력되었다.
아주 작은 차이이기 때문에 굳이 신경쓸필요는 없지만.. 그래도 단 몇줄로 해결 가능하니 기억해 두었다가 필요할때 쓰면 좋을듯 싶다.
도움이 되셨다면~ 정성으로 빚은 저희 앱! 많은 이용 바래요:)
https://meorimal.com/index.html?tab=spaceship
https://meorimal.com/subway.html
사업자 정보 표시
주식회사 머리말 | 고영진 | 서울특별시 송파구 중대로 135 서관 10층 (가락동, 아이티벤처타워) | 사업자 등록번호 : 524-88-00727 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2017-서울강남-03941호 | 사이버몰의 이용약관 바로가기
'개발 > android' 카테고리의 다른 글
seekbar로 만든 진행바에 터치가 안되게 하기 (0) | 2020.03.24 |
---|---|
날짜 텍스트에 일수를 더해보자 (0) | 2020.01.31 |
FragmentPaper에서 ListView가 매번 초기화되지 않도록 하기 (0) | 2019.05.23 |
객체 속도가 빠를수록 충돌검사가 부정확해진다면 (0) | 2019.04.02 |
Dialog를 닫았는데 background로 나갔다 들어오니 다시 열린다??? (0) | 2019.03.13 |