为 TVertScrollBox 添加下拉回弹刷新功能(手势和动态的使用)。
利用 TVertScrollBox 的滚动层功能添加更多可能的列表,但是好像么有下拉刷新回弹的功能,ListView 有时无法做太复杂的列表,刷新也不太爽。所以临时想个办法用vsbox。
这里用到了手势控制:
GestureManager
ActionList
FloatAnimation
在界面上放一个GM,再在vsBox上放一个FloatAnimation
设置vsBox的属性如下:
autoreverse 为自动返回,即:开始-》结束-》开始
interpolation 设置为正弦模式,效果而已,当然,选择其他的诸如线性模式和弹性模式都是可以的,根据个人喜爱,也就是StartValue到Stopvalue之间的算法而已。
propertyname设置要修改哪个值?这里选择了Y轴的坐标值。
设置事件,当动画结束时(onfinish)执行:
procedure TForm5.FloatAnimation1Finish(Sender: TObject);
begin
FloatAnimation1.Enabled:=False;
end;
设置手势选项,如下:
为了确保Vertscrollbox在顶部,我们用这样一种方法:
设置vsbox的事件,
该事件可现实vsbox的viewport,在顶部时,Y值为0
procedure TForm5.VertScrollBox1ViewportPositionChange(Sender: TObject;
const OldViewportPosition, NewViewportPosition: TPointF;
const ContentSizeChanged: Boolean);
begin
oldVpPos:=OldViewportPosition.Y; //全局变量记录新旧两个Y值,其实只用到了一个
newVpPos:=NewViewportPosition.Y;
end;
Action1的内容如下:
procedure TForm5.Action1Execute(Sender: TObject);
begin
if (newVpPos<10) then //在顶部时
begin
FloatAnimation1.Inverse:=False;
FloatAnimation1.AutoReverse:=True;
FloatAnimation1.Enabled:=True; //执行动画,执行onfinish里会设置为false
Memo1.Lines.Insert(0, '刷新一次。'); //每次刷新运行了一次,这里可以写刷新代码
end;
end;
评论