设为首页收藏本站
机战Z2破界篇 星组汉化 下载

星组游戏论坛

 找回密码
 注册(QQ注册+邀请注册)

QQ登录

只需一步,快速开始

查看: 5125|回复: 7

[心得] android bitmap绘画文字自动换行 [复制链接]

Rank: 11Rank: 11Rank: 11Rank: 11

UID
95322
星币
42
积分
27
阅读权限
90
注册时间
2012-12-13
最后登录
2013-5-9
发表于 2013-3-26 10:10:35 |显示全部楼层
在使用canvas.drawText()绘制文字的时候,发现,如果需要绘制的文字较长,需要换行,通过在文字中加上“\n"或者”\r\n"都无法实现换行,如果非要使用canvas.drawText()方法来绘制,则必须自己手动的将文字给断开,这样很不方便,如果需要改变文字大小的时候,则还需要重新改写断开的方法,或者直接写个可以根据文字大小进行自动断开字符串的方法,但是,都是很繁琐的办法,其实,android中是有提供实现绘制字符串换行的方式的,如下:
  1. public Bitmap getNewBitMap(String text) {
    - w' p! S$ M5 l# W' [7 k
  2. Bitmap newBitmap = Bitmap.createBitmap(120,150, Config.ARGB_4444);6 i8 F7 C, A$ `. q3 d4 L
  3. Canvas canvas = new Canvas(newBitmap);
    ; x" k5 K9 @$ G  G) B& T) [
  4. canvas.drawBitmap(bmp, 0, 0, null);- B- G8 e+ K6 M( K+ ~3 H* U6 p
  5. TextPaint textPaint = new TextPaint();% j0 s8 p9 D+ A7 H3 @8 T/ N% m. @
  6. textPaint.setAntiAlias(true);1 _7 H: g0 |0 U' b( m; A0 P
  7. textPaint.setTextSize(16.0F);0 }0 H" R* f$ a
  8. StaticLayout sl= new StaticLayout(text, textPaint, newBitmap.getWidth()-8, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false);
    0 E: S+ k0 G) Q* d, q: d, Q  J
  9. canvas.translate(6, 40);
    6 {; o% z+ [. r7 l+ X) e1 [
  10. sl.draw(canvas);4 u- V# U" [! w1 D2 U: O$ I* p
  11. return newBitmap;
    & |+ \1 O& f! i, U
  12. }
复制代码
android StaticLayout参数解释
7 Z# k- r& {# [$ E6 ]7 q4 FStaticLayout layout = new StaticLayout(context.getString(R.string.about),textPaint,(int)(300*fDensity),Alignment.ALIGN_CENTER,1.5F,0,false);
7 t& N$ a2 e" S, G: H1 I% m) I; `layout.draw(canvas);% B" t# P/ d6 F$ {$ U" Z3 u# Q
参数含义:9 D+ J8 d8 r3 r; N0 `
1.字符串子资源1 b0 S" r& a  M! ]3 ]& L& T9 b& A" Q
2 .画笔对象# x+ j# @/ A6 w9 o2 Q
3.layout的宽度,字符串超出宽度时自动换行。
. r0 J$ y; u6 Q; p5 j4.layout的样式,有ALIGN_CENTER, ALIGN_NORMAL, ALIGN_OPPOSITE 三种。
' t( z! T% c% m' C" d& N3 J0 ^5.相对行间距,相对字体大小,1.5f表示行间距为1.5倍的字体高度。
- d2 A7 ^9 h" r( m, _6.相对行间距,0表示0个像素。( r3 R# O' U9 B7 J# B1 N6 D* T: ]# U; W
实际行间距等于这两者的和。" d" X$ T# t8 n2 H
7.还不知道是什么意思,参数名是boolean includepad。& s  |' M( K  o4 P# l# W
需要指出的是这个layout是默认画在Canvas的(0,0)点的,如果需要调整位置只能在draw之前移Canvas的起始坐标
) b# \% U; X9 ycanvas.translate(x,y);$ f3 I' ]6 J$ w+ q
8.用此方法可以实现"\n"自己换行。- @* T( I, i, s+ S5 f
0 s3 T2 U& R5 R2 c4 q
已有 1 人评分星币 收起 理由
绝世爱笑 + 1 这样才算爱过~

总评分: 星币 + 1   查看全部评分

Rank: 11Rank: 11Rank: 11Rank: 11

UID
95061
星币
5191
积分
814
阅读权限
90
注册时间
2012-12-5
最后登录
2018-9-29
发表于 2013-3-26 10:16:14 |显示全部楼层
我就看看,我不说话~~~
Freely Tomorrow

管理员

勇者

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

UID
4
星币
262
积分
5143
阅读权限
255
注册时间
2007-6-30
最后登录
2019-2-21
发表于 2013-3-26 15:19:19 |显示全部楼层
只有这样才算爱过~~
星组游戏开发组 急招游戏画师美工~~~详见链接点我进入招募贴

Rank: 1

UID
96167
星币
7
积分
3
阅读权限
10
注册时间
2013-1-17
最后登录
2013-4-8
发表于 2013-3-26 16:39:29 |显示全部楼层
灰常的不错,用过都说好,楼主小伙不错~拍肩
发帖际遇:金瞳 打败野生的金属史莱姆,获得2 星币. 幸运榜 / 衰神榜

Rank: 11Rank: 11Rank: 11Rank: 11

UID
95861
星币
51
积分
27
阅读权限
90
注册时间
2013-1-5
最后登录
2013-4-19
发表于 2013-3-29 11:40:41 |显示全部楼层
很好  学习顶

Rank: 1

UID
97918
星币
13
积分
2
阅读权限
10
注册时间
2013-3-29
最后登录
2013-3-29
发表于 2013-3-29 13:54:35 |显示全部楼层
学习
头像被屏蔽

禁止发言

UID
109963
星币
27
积分
122
阅读权限
0
注册时间
2015-10-8
最后登录
2015-10-13
发表于 2015-10-12 01:48:58 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 4

UID
115225
星币
59
积分
348
阅读权限
40
注册时间
2016-7-25
最后登录
2017-10-24
发表于 2017-3-25 16:16:02 |显示全部楼层
谢谢你的发言` 非常有意义
8 N# t3 l& e5 D3 D" ]/ f# |
9 c) m, w9 z7 Z" n0 D, I8 J' F( b6 D9 ~( k
: e; W9 N! `7 }' u
  g% B9 r0 B  h; u5 z
% g) d0 R2 L: y: F' _# v8 Y
- Y. [9 Q1 ?" _; X/ H; A

. v& F/ `9 G2 n. }7 O+ ~$ m' o; l1 I/ g2 }! c6 u- u) @; c# h, q
, v' M- n) R" t1 \
6 b0 C/ s. o+ ?" M8 ]

, X; ~+ Y, e/ k2 H% Z' M" ]
9 h5 b! l* D1 P# m7 y, y/ O. D! j广西百香果 百香果批发 藤县百香果批发 百香果网狼合作社 广西梧州百香果

Archiver|星组游戏论坛 ( 京公网安备110403080002 )  

GMT+8, 2019-2-22 20:33

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部