自定义自动换行布局

注:这篇文章在onmeasure方法的实现上有不合理的地方(见评论),故只能作为一种参考,要当成一个合格控件使用还需要完善。

暴风影音的搜索页面有一个效果,每一行的组件如果最后一个显示即将超出屏幕宽度,则自动换行。效果图:

本demo的效果图:

实现该效果不能使用已有的组件,必须自定义一个布局。

重点介绍:自定义布局可以继承ViewGroup,要想实现该效果,我们的自定义布局里面必须要继承父类中的onMeasurt()和onLayout()两个方法。

        onMeasure()方法的作用是设置布局的显示范围,超出该范围的部分将被遮挡.核心代码是:setMeasuredDimension(int width,int height).

        onLayout()方法的作用是在父容器内布局子组件,核心功能是根据计算出来的子组件的四个”坐标”将其放在父容器的指定位置,核心代码为:childview.layout(int left,int top,int right,int bottom)

              下面贴出Demo源码,算法解释已经在注释中了。

自定义布局:

HorizantalFallWaterLayout.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

.relpost{clear:both}

Tag:

Freenovo 发表于2014-01-10 09:54:00 | 编辑 | 分享 0

引用地址:

原文地址:https://www.cnblogs.com/freenovo/p/4469790.html