android 有无可能在 c/c++层,且非主线程内做文本的排版,测量( measure)?

2015-12-03 10:47:24 +08:00
 faywong8888

比如会涉及到前几个字 font-size 为 20px ,其他的字为 14px ,然后自动换行之类的需求。除了在 Java 层创建 TextView 然后强制调用其 measure 函数外,还有其他更简便且可在 c/c++层,非主线程做排版和测试的方法吗?

6498 次点击
所在节点    Android
11 条回复
CodingPuppy
2015-12-03 10:57:55 +08:00
据本菜所知, textview 也是通过 canvas.drawtext 调用到 native 层处理的字体纹理渲染,但是排版貌似是在 java 层做的吧?。。貌似有个叫 Layout.java 的类
zs53dada
2015-12-03 11:16:56 +08:00
java 层难道不不比 c++简单吗。。 Html.from(把你的文字设置称为富文本); 直接 settext(html.from(xxx));
aa23
2015-12-03 11:26:27 +08:00
同意二楼, lz 可以追踪一下 charsquence
faywong8888
2015-12-03 12:04:37 +08:00
@zs53dada
@CodingPuppy
Java 层的方法我都会。现在的关键是 Java 层的方法需要在主线程,没法与 workder 线程的其他逻辑并发,遇到复杂排版的文字时吞吐量比较低,性能差。且我其他的逻辑都在 c 层。
ffffwh
2015-12-03 12:39:24 +08:00
获取字体信息然后自己 /用库去算?
ahtsiu
2015-12-03 14:22:49 +08:00
Paint 类里有 measureText 方法,不限定在主线程里做
r00tt
2015-12-03 14:46:31 +08:00
TextPaint 就可以去测量咯,随便放哪个线程
binsys
2015-12-05 22:36:49 +08:00
除非自己绘制文字,否则需要 android 的引擎字体你就必须调用 skia 的东西吧
Cryse
2015-12-19 20:13:18 +08:00
@faywong8888
用 StaticLayout 或者 DynamicLayout, 在其他线程创建,然后用自定义 View 在主线程画出来就行了。
复杂长文本直接用 TextView 性能很差…
faywong8888
2015-12-21 19:25:01 +08:00
@Cryse
首先非常感谢你的回答。 React Native 里边的文字排版就是用的 StaticLayout 。
但是这样弄我需要提前将富文本自己一个个 parse 然后转成 SpannableString 的吧?
faywong8888
2015-12-21 19:35:57 +08:00
@Cryse 相当于 new StaticLayout(Html.from(html)),这样子去做。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/240779

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX