在开发过程中可能需要实现动态的滚动效果,这里记录一个Duilib控件实现滚动的例子。
上图中的每一条显示和每一组时间都是一个Label控件。
其中,竖线的实现方法是创建一个Label控件,然后设置该控件的SetFixedHeight属性和SetBkColor属性。至于滚动效果2和3有所不同。
3的滚动效果原理,将后一个控控件的高度赋值给前一个控件,最后一个控件则使用传入的值。
2的滚动效果原理,与3基本一致,只是2是初始化的时候就加载完成了。所以不需要传入值,只需要保留第一个控件的值,将后面的值赋值给前面的,最后将第一个的值赋值给最后一个即可。
1的滚动效果原理。整个1行的所有Label控件都在一个HorizontalLayout控件中,给该控件设置横向滚动属性,并在每次刷新控件时将当前位置设置到最右侧。第一行在初始化的时候已经创建成功,当每一次刷新的时候,判断最后一个Label控件的宽度(width),如果是设定的值(100)则创建新的Label控件并设置一个初始的值(2),并删除第一个Label控件。如果与设定的值(100)不相同则调整最后一个控件的宽度。
注意:在创建之初,1、2、3三行控件都是使用删除第一个控件与创建新控件在最后面,当时这样总会崩溃,原因不详可能与Duilib内部实现有关。所以才将2、3改成赋值的方式。