效果展示
最近要业务中需要做一个瀑布流的效果,按理说正常的瀑布流网上已经有很多解决方案了。
但我还是想自己尝试写一下。
又因为这块要求有一点特殊,下面大概讲下需求:
首先子元素的对方肯定还是和其他瀑布流一样,按照子View的宽高动态摆放位置
然后这边子View都是Textview,其实就是各种标签
还有就是要求可以限制行数
比如子元素很多,只展示前两行
后面的用“…”表示(类似我们TextView里面文字过多时展示的效果一样)
具体效果如下:

可以看到最后的一个标签的内容是省略号
如果规定是三行,并且每超出规定行数,效果是这样的(红色背景色是我自己加的):

那么开干
测量代码
这边先定义了两个变量:childMarginRight 和chilMarginBottom
主要是来控制子View之间的间距的
还有一个mMaxLines控制最大行数
这边思路是:动态测量子View,当超过两行时,把最后一个子View的内容改为省略号
先看测量方法:
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
val widthSize = MeasureSpec.getSize(widthMeasureSpec)
val widthMode = MeasureSpec.getMode(widthMeasureSpec)
val heightSize = MeasureSpec.getSize(heightMeasureSpec)
val heightMode = MeasureSpec.getMode(heightMeasureSpec)
val childCount = childCount
var lineWidth = 0
var lineHeight = 0 //单行最大的高度
var width = 0
var height = 0 //总高度
var lineCount = 1 // 当前行数
for (i in 0 until childCount) {
val child = getChildAt(i)
measureChild(child, widthMeasureSpec, heightMeasureSpec)
val childWidth = child.measuredWidth + childMarginRight
val childHeight = child.measuredHeight
if (lineWidth + childWidth > widthSize) { // 换行
lineWidth =

文章介绍了如何在Android开发中实现一个自定义的瀑布流布局,该布局能够根据子View的宽度和高度动态摆放,并且针对TextView内容超出指定行数时自动显示省略号。作者详细讲解了测量和布局过程,包括动态测量子View、判断是否换行以及设置最大行数的逻辑。
最低0.47元/天 解锁文章
1315

被折叠的 条评论
为什么被折叠?



