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

星组游戏论坛

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

QQ登录

只需一步,快速开始

查看: 5007|回复: 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) {
    ! R" `* R! D0 P( H( C
  2. Bitmap newBitmap = Bitmap.createBitmap(120,150, Config.ARGB_4444);
    / L. L: x" E% W6 O0 j5 ?6 o
  3. Canvas canvas = new Canvas(newBitmap);. l* G6 W0 K6 x0 }, r
  4. canvas.drawBitmap(bmp, 0, 0, null);! \7 H3 w1 u4 D! ~, z
  5. TextPaint textPaint = new TextPaint();# e# h6 {* S4 p* j4 @9 A
  6. textPaint.setAntiAlias(true);
    ; F2 a; o% K" b+ b
  7. textPaint.setTextSize(16.0F);
    3 i0 |6 F1 v7 N
  8. StaticLayout sl= new StaticLayout(text, textPaint, newBitmap.getWidth()-8, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false);6 E+ c/ L8 B2 s( q, k# c
  9. canvas.translate(6, 40);8 x, `' W& C' C5 Y, i
  10. sl.draw(canvas);% \' j& a3 Y- O# K6 S; R$ K: U7 t
  11. return newBitmap;( w; ?0 Y/ n# ?+ B* D& Z- W7 z
  12. }
复制代码
android StaticLayout参数解释# ~- e9 g$ M" H) H: ^6 l; F* d
StaticLayout layout = new StaticLayout(context.getString(R.string.about),textPaint,(int)(300*fDensity),Alignment.ALIGN_CENTER,1.5F,0,false);
; l) L3 c% A3 O7 D1 V6 E) }layout.draw(canvas);( X! {/ L9 d: |4 e7 }
参数含义:+ k+ M1 C5 Q3 p5 Q$ G
1.字符串子资源
3 i$ ]$ n  S# c$ w2 |7 r2 .画笔对象
7 Y9 T2 K  F4 ?) E) n( z4 p3.layout的宽度,字符串超出宽度时自动换行。
* K  H; y) @+ o/ Y' T, G4.layout的样式,有ALIGN_CENTER, ALIGN_NORMAL, ALIGN_OPPOSITE 三种。
) V7 U" @  h/ n. D+ ?$ Q% g2 O; d5.相对行间距,相对字体大小,1.5f表示行间距为1.5倍的字体高度。
* F# L" J# U, Z: `1 ~6.相对行间距,0表示0个像素。; S. i$ D5 H8 _7 P$ w2 l) b
实际行间距等于这两者的和。" Y6 ]2 [( o! n% ?) _
7.还不知道是什么意思,参数名是boolean includepad。& V% H- F* i1 U/ @2 N
需要指出的是这个layout是默认画在Canvas的(0,0)点的,如果需要调整位置只能在draw之前移Canvas的起始坐标
, Q1 {" q8 g0 bcanvas.translate(x,y);
6 w( U3 N4 K, [+ J" m8.用此方法可以实现"\n"自己换行。
* U$ t1 a  }7 V) c6 N% {
+ D0 o$ c$ I* E3 y! c' G5 k3 y
已有 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
星币
317
积分
5134
阅读权限
255
注册时间
2007-6-30
最后登录
2018-12-17
发表于 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 |显示全部楼层
谢谢你的发言` 非常有意义6 U1 [+ b# [0 `7 d8 Z3 k' L4 q

' u! K+ Z" c/ `, C# h( H% f; S/ \# l$ x3 b# T) f
7 p# @2 @$ F; l0 h/ s

0 y4 X! m" I# Y' \
4 q, N  Q- V# |+ N  x+ x- c; O6 B3 l' R) J5 H  I. \

0 c: w8 q+ U. D  ~' r7 e7 w
; P; @) n% @( A) }& p  Z0 A6 A& I. Z
& S1 A2 C& F; x& A
4 J9 @! w& I+ m3 x% h8 Q3 k  P9 c% i" F* R5 g

1 Q9 x$ S8 _6 L9 k广西百香果 百香果批发 藤县百香果批发 百香果网狼合作社 广西梧州百香果

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

GMT+8, 2018-12-18 00:59

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部