Android知识笔记:特效系列,仿instagram文字排版特效,字节跳动面试分享

因为最近刚好在做这样的需求,于是对其实现原理做了研究,现在写下这篇博客希望能帮到有需要的人。

下面是我实现的效果图:

思路探究

因为网上找不到什么相关的资料,所以就直接通过玩ins猜测大概的实现思路,我整理下自己一开始的一些疑问。

当输入的文字越来越多,字体越来越小时怎么保证每行最多能够显示的文本不变?

正常情况下,当你字体越来越小而输入框宽度不变时,那么你每行可输入的文字就会变多,但是你发现ins无论字体多大,每行最多能容纳的文本是不变。我猜测可能是输入框会随着字体的变化而改变。

通过打开开发者选项的应用布局边界,可以看到确实ins的输入框的宽度是动态变化的。

下面是打开应用布局边界后的效果图:

当然,这里可能会引入一个新的问题,那就是输入框的宽度是怎么动态改变的?

好让它刚好能够在字体大小变化的过程中最多可容纳的文本数不变。

这个问题会在下面说,这里先不展开。

每行字体大小是怎么确定的,又是怎样联动变化的?

这个问题一开始想了很久,我觉得如果把这个问题搞明白基本就已经成功一半了。大部分人一开始可能都会很容易陷入局部思维,包括我也一样,一直在纠结每行字体是怎么变化的,但其实应该要从整体考虑,从整体考虑一切都会变得很简单,代码实现上也会变得更加容易,不需要处理各种特殊情况。

具体思路:

遍历每行文本,以适应最大文本宽度算出每行的字体大小,然后以每行的字体大小算出每行行高度,把每行行高度累加得到文本总高度,然后判断文本总高度是否大于最大文本高度,如果大于则按比例缩小每行的字体大小,以缩小每行的行高度,得到新的文本总高度,直到文本总高度小于最大文本高度。

上面的这么大段文字总结起来其实就4个步骤:

  1. 拆行
  2. 按匹配最大宽度计算每行字体大小
  3. 按匹配最大高度计算每行字体大小
  4. 重新调整EditText宽度

知识储备

在动手之前我们需

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值