- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
第一个问题:您有 400 像素的宽度可以继续,并且需要在该限制内尽可能大地容纳一些文本(因此,文本应使用该空间量)。
加入一个新的约束:如果文本只是“A”,那么它不应将其缩放到 100 像素高度以上(或某些特定的字体大小)。
然后,最后一种情况:换行。以尽可能大的方式适合一些文本,例如400 x 150 像素。
一个明显的方法是简单地从点 1 开始,然后增加直到你不能再适应它。这对所有三个问题都有效,但会非常粗糙。边界内的单行拟合可以通过用一些固定的点大小编写它来完成,检查文本的结果像素边界,然后简单地用转换缩放它(然后文本也适当缩放,查看TransformUI ).
任何关于其他攻击方法的想法都将不胜感激!
最佳答案
由于您要建模的内容很复杂,尤其是有换行符,因此您尝试所有尺寸的最初建议是正确的,尤其是在需要准确的情况下。
但是,您可以使用二进制搜索来查找合适的字体大小,而不是测试每个值。您知道大小介于 1 和 100 之间(您的上限)。使用二进制搜索,每个测试设置字体大小并检查生成的布局。如果文本太大,则我们搜索当前可能值范围的下半部分。如果字体大小合适,那么我们搜索上半部分。你的搜索最多使用7次尝试(100 log base 2四舍五入),它会很精确,找到最大的尺寸不会超过,如果你以后需要添加更多的需求,它会很灵活,比如混合字体或更严格的布局限制。
我假设您正在使用一个文本组件进行换行,并且您可以将最大宽度设置为 400。因此,您设置字体大小并进行布局,返回所需的高度,布局给定宽度内的文本。
您可以使用提示来尝试引导算法更快地得出结果,例如使您的第一个猜测接近预期大小,但文本呈现速度很快,性能提升可能不值得付出实现努力。
参见维基百科 - Binary Search Algorithm
关于java - "Zoom"文本在约束/框内尽可能大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2837410/
我知道在 KDB 中,如果您有一个列表,例如... l:`apples`oranges`pears` 您可以像下面这样进行 N 次随机选择: 9?l 但是如何尽可能均匀地选择列表中的每个项目? 最佳答
我真的厌倦了它。我有一个高级 Web 应用程序依赖于大量 Javascript 库(jQuery、jQueryUI、OpenLayers、highcharts、EJSChart 等等)。不用说,Int
我是一名优秀的程序员,十分优秀!