android:pdfdocument:multiline
multiline
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
android:pdfdocument:multiline [2024/12/13 01:42] – canvas 이거니맨 | android:pdfdocument:multiline [2024/12/14 00:42] (현재) – 세로로쓰기 이거니맨 | ||
---|---|---|---|
줄 5: | 줄 5: | ||
{{: | {{: | ||
- | ===== 코드 | + | ===== 여러 줄(Multi line) ===== |
다음이 전체 코드이다. | 다음이 전체 코드이다. | ||
줄 129: | 줄 129: | ||
</ | </ | ||
+ | ===== 회전 ===== | ||
+ | 위의 | ||
+ | |||
+ | 이런식으로 말이다. | ||
+ | |||
+ | |||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ===== 세로로 쓰기 ===== | ||
+ | |||
+ | ==== 1. 개요 ==== | ||
+ | |||
+ | 글자를 세로로 쓰는 방법은 (1) 한 글자씩 루프를 돌린 후에 각 글자의 y축을 바꿔주는 방법 (2) 위의 staticLayout의 폭을 한 글자에 맞추는 방법을 생각할 수 있다. | ||
+ | |||
+ | staticLayout 개념을 연습하는김에 세로로 쓰기를 해보자 | ||
+ | |||
+ | |||
+ | ==== 2. 글자의 폭 계산 ==== | ||
+ | |||
+ | 글자는 각기 폭이 다르다.물론 한글의 경우 거의 대부분의 폭이 같을 것이나 반드시 장담할 수는 없다. 따라서 어떠한 문장 중에서 글자들은 제각기 폭이 다를 것이다. 따라서 안드로이드 API는 getTextWidths()라는 함수를 제공한다. 이를 통해 가장 긴 폭을 가진 글자의 폭을 반환받을 수 있다. | ||
+ | |||
+ | <code kotlin> | ||
+ | // 문장 중에서 가장 너비가 큰 글자의 너비 구하기 | ||
+ | private fun getCharWidth(text : String, textPaint: TextPaint) : Float { | ||
+ | |||
+ | var maxWidth = 0f | ||
+ | |||
+ | val w = FloatArray(text.length) | ||
+ | cellBodyLeft.getTextWidths(text, | ||
+ | w.forEach { | ||
+ | if (maxWidth < it) { | ||
+ | maxWidth = it | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== 3. 텍스트 레이아웃의 폭을 지정하기 ==== | ||
+ | |||
+ | 다음과 같이 가장 긴 글자의 폭을 | ||
+ | |||
+ | <code kotlin> | ||
+ | fun verticalTxt(text : String, canvas: Canvas) { | ||
+ | |||
+ | val cWidth = getCharWidth(text, | ||
+ | |||
+ | val textLayout = StaticLayout.Builder.obtain(text, | ||
+ | .setLineSpacing(0f, | ||
+ | |||
+ | canvas.save() | ||
+ | canvas.translate(100f, | ||
+ | |||
+ | textLayout.draw(canvas) | ||
+ | canvas.restore() | ||
+ | |||
+ | currentPOS.Y+= textLayout.height + 20 | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | {{: |
android/pdfdocument/multiline.1734021743.txt.gz · 마지막으로 수정됨: 2024/12/13 01:42 저자 이거니맨