ID499896465

为 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;













评论