Android引自coco2d获取字符串宽高/长度
2014-04-14 12:14
302 查看
今天看到在cocos2d中的CCTexture2D源码里面有对字符串的测量方法,感觉是比较靠谱。// 若还有更好的方式,请不要犹豫,分享下给我~~
避免浪费找资料人士的时间,直接上关联,下面还有几个其他的测量方法,有兴趣的往下滚滚:
测试:
思路是采用 Paint 中的 measureText 跟 getTextBounds 方法,不过有几个点需要注意的,因为在网上也有看到说结果不是很准确。我的猜测是由于字体/字体大小的不同,所以会导致有不准确的结果。
----------------------------------- 贴点代码 ----------------------------------
结果如下:
从这一部分就可以看出, measureText 跟 getTextBounds 方法所得到的宽度就已经不一样了。 并且getTextBounds难道是能扫描出文本的真实宽高?结果导致' '扫出来是空白的(0,0)?? 你猜?
----------------------------------- 再贴点代码 ----------------------------------
结果如下:
CCTexture2D 中用-paint.ascent() + paint.descent() 来获取文本的高度,而 Times New Roman 你怎么会这么奇葩,得到的高度跟其他字体的不一样?
------------------------------- 总结 -----------------------------------
大概能想到的可能引起测量结果不一样的情况就这些了。
实际情况是我们需要的应该是字符串所呈现出来的大小,好进行字符串分割或者给加一个背景图片什么的。
所以我个人觉得使用measureText来获取字符串宽度,使用-paint.ascent() + paint.descent()来获取字符串高度会更好一些。
避免浪费找资料人士的时间,直接上关联,下面还有几个其他的测量方法,有兴趣的往下滚滚:
Paint paint = new Paint(); float width = paint.measureText(txt); float txtHeight = -paint.ascent() + paint.descent();
测试:
思路是采用 Paint 中的 measureText 跟 getTextBounds 方法,不过有几个点需要注意的,因为在网上也有看到说结果不是很准确。我的猜测是由于字体/字体大小的不同,所以会导致有不准确的结果。
----------------------------------- 贴点代码 ----------------------------------
Paint paint = new Paint(); Rect rect = new Rect(); // 测试不同类型的字符大小。假如这些字符都是相同的大小,那么我们在切割/自动换行字符串的时候就方便了....可惜貌似不能 String[] txts = { "a", "你", ",", " " }; for (String txt : txts) { float txtWidth = paint.measureText(txt); paint.getTextBounds(txt, 0, 1, rect); Log.w(String.format("'%s' W (measureText)", txt), String.valueOf(txtWidth)); Log.w(String.format("'%s' W (getTextBounds)", txt), String.valueOf(rect.width())); Log.w(String.format("'%s' H:", txt), String.valueOf(rect.height())); }
结果如下:
从这一部分就可以看出, measureText 跟 getTextBounds 方法所得到的宽度就已经不一样了。 并且getTextBounds难道是能扫描出文本的真实宽高?结果导致' '扫出来是空白的(0,0)?? 你猜?
----------------------------------- 再贴点代码 ----------------------------------
Paint paint = new Paint(); float txtHeight = -paint.ascent() + paint.descent();// Paint.ascent is negative, so negate it Log.w("H (without typeface)", String.valueOf(txtHeight)); // 测试不同字体所得到的行高是不是都一样. String[] fonts = {"Arail","Times New Roman","宋体","Tahoma","黑体"}; for(String fontName :fonts){ Typeface typeface = Typeface.create(fontName, Typeface.NORMAL); paint.setTypeface(typeface); txtHeight = -paint.ascent() + paint.descent(); Log.w(String.format("H (typeface: %s)",fontName), String.valueOf(txtHeight)); }
结果如下:
CCTexture2D 中用-paint.ascent() + paint.descent() 来获取文本的高度,而 Times New Roman 你怎么会这么奇葩,得到的高度跟其他字体的不一样?
------------------------------- 总结 -----------------------------------
大概能想到的可能引起测量结果不一样的情况就这些了。
实际情况是我们需要的应该是字符串所呈现出来的大小,好进行字符串分割或者给加一个背景图片什么的。
所以我个人觉得使用measureText来获取字符串宽度,使用-paint.ascent() + paint.descent()来获取字符串高度会更好一些。
相关文章推荐
- Android中获取字符串长度、宽度(所占像素宽度),手动设定字符串换行
- Android中获取字符串长度、宽度
- Android开发经验之获取画在画布上的字符串长度、宽度(所占像素宽度)
- Android中获取字符串长度、宽度(所占像素宽度)
- Android开发经验之获取画在画布上的字符串长度、宽度(所占像素宽度)
- android获取字符串的长度
- Android - 获取字符串长度的宽度
- Android开发经验之获取画在画布上的字符串长度、宽度(所占像素宽度)
- Android中获取字符串长度、宽度(所占像素宽度),手动设定字符串换行
- Android中获取字符串长度、宽度(所占像素宽度)
- Android中获取字符串长度、宽度(所占像素宽度)的方法
- JS 获取中英字符串字节长度
- PHP获取中英混合字符串长度的方法
- 从字符串中获取最长子串的长度
- Android获取屏幕宽度与长度的三个…
- C# 获取字符串字节长度
- 通过strlen()方法和循环遍历分别获取指针指向的字符串长度
- Macos Coco2d-x Android开发
- 获取英汉混合字符串的长度 mb_strlen
- 运用El表达式截取字符串/获取list的长度