You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi 11.2 Firemonkey应用中实现滚动时底部栏动画隐藏?

Firemonkey实现滚动时底部栏动画隐藏的方案

Firemonkey没有专门内置实现这种底部栏随滚动隐藏的组件(TMultiView主要用于侧边抽屉导航,不适合这个场景),但可以通过现有组件组合轻松实现需求,核心思路是监听ListView滚动事件,配合Animator组件做平滑动画。

实现步骤与代码示例

假设你的界面包含:

  • TListView(命名为ListView1):加载大量数据的列表
  • TPanel(命名为BottomPanel):需要隐藏的底部栏
  • TAnimator(命名为Animator1):用于处理平滑动画

1. 初始化底部栏位置

在窗体创建时,确保底部栏初始处于屏幕底部:

procedure TForm1.FormCreate(Sender: TObject);
begin
  BottomPanel.Position.Y := Self.ClientHeight - BottomPanel.Height;
end;

2. 监听ListView滚动事件,控制底部栏显示/隐藏

通过OnScroll事件判断滚动方向,触发对应动画:

procedure TForm1.ListView1Scroll(Sender: TObject; const ScrollPos: TPointF);
var
  CurrentScrollPos: Single;
  ScrollDelta: Single;
  TargetY: Single;
begin
  static var LastScrollPos: Single := 0;
  CurrentScrollPos := ScrollPos.Y;
  ScrollDelta := CurrentScrollPos - LastScrollPos;

  // 向下滚动(ScrollDelta为正,FMX ListView滚动时Y轴向下递增)
  if ScrollDelta > 5 then // 设阈值避免微小滚动误触发
  begin
    TargetY := Self.ClientHeight; // 底部栏完全移出屏幕
    if BottomPanel.Position.Y < TargetY then
      Animator1.AnimateFloat(BottomPanel, 'Position.Y', TargetY, 0.3);
  end
  // 向上滚动
  else if ScrollDelta < -5 then
  begin
    TargetY := Self.ClientHeight - BottomPanel.Height; // 底部栏回到原位
    if BottomPanel.Position.Y > TargetY then
      Animator1.AnimateFloat(BottomPanel, 'Position.Y', TargetY, 0.3);
  end;

  LastScrollPos := CurrentScrollPos;
end;

3. 处理窗口大小变化

防止窗口 resize 时底部栏位置错乱:

procedure TForm1.FormResize(Sender: TObject);
begin
  if BottomPanel.Position.Y > Self.ClientHeight then
    BottomPanel.Position.Y := Self.ClientHeight;
  if BottomPanel.Position.Y < Self.ClientHeight - BottomPanel.Height then
    BottomPanel.Position.Y := Self.ClientHeight - BottomPanel.Height;
end;

额外优化建议

  • 加入滚动停止延迟显示:用TTimer组件,在滚动停止1秒后自动显示底部栏,提升用户体验
  • 调整动画时长:代码中的0.3是动画持续秒数,可根据需求修改
  • 配合透明度动画:同时动画改变BottomPanel.Opacity,让过渡更自然

内容的提问来源于stack exchange,提问作者Mockminister

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:20:46