我是 FireMonkey 的新手(被它使用 Android 的新能力所吸引)。我正在尝试使用列表框的动画来对项目的选择进行动画处理,以显示底层内容(一种常见模式)。但是,当我为列表框的消失设置动画时,我无法让列表框管理对先前选择的项目的取消选择。奇怪的是,这似乎只发生在 Windows 平台上,而不是 Android 或 iPad 设备(或 iPad 模拟器)。
要重现问题(在 RAD Studio XE5 中):
1) 创建一个新的 FireMonkey 移动应用程序,选择 Tablet Master-Detail 作为起始布局
2) 右键单击 Target Platforms,选择 32-bit Windows,以简化调试,然后选择它。
3) 添加一个新的 TListBox 对象,并将其放在窗口的左侧。
4) 使用 Structure 浏览器将其移动到 LeftLayout,使其成为 LeftLayout 的父级。
5) 单击 ListBox1 对象
6) 将 Align 属性更改为 alClient,以填充 LeftLayout
7) 在 ObjectInspector 中,选择 Position Property 和 X Sub Property,然后选择 Create New TFloatAnimation。FloatAnimation 将被命名为 FloatAnimation1
8) 为 ListBox1 创建一个新的 OnItemClick 处理程序,并添加以下代码:
FloatAnimation1.StartFromCurrent := True;
FloatAnimation1.StopValue := 0 - ((LeftLayout.Width) / 1);
FloatAnimation1.Start;
9) 创建一个新按钮,并将其放在左侧窗口顶部的工具栏上
10) 为新按钮创建一个处理程序,并添加以下代码:
FloatAnimation1.StartFromCurrent := True;
FloatAnimation1.StopValue := 0;
FloatAnimation1.Start;
11)双击ListBox打开Items Designer,点击AddItem按钮三下,添加三个TListBoxItem
12) 运行应用程序。单击 ListBox 中的三个项目之一。ListBox 向左移动,不在视线范围内。单击我们添加的按钮将其取回。单击其他项目,最终,您将选择所有三个项目,即使 ListBox1 的 MultiSelect 已关闭。
13) 停止应用程序。通过将“1”更改为“2”来更改 OnItemClick 处理程序代码,因此 ListBox 只会向左移动一半。再次运行应用程序。现在,当您单击 ListBox 时,只会选择一项,而先前选择的项将被取消选择(对于单选列表框应该如此)。
同样,如果我在 iPad、iPad 模拟器或 Android 平板电脑上运行它,ListBox 工作正常:当在 ListBox 中单击一个项目时,之前选择的项目被取消选择。
我不是第一个发现这个的人,因为这种动画在应用程序中很常见。为什么 ListBox 行为不端,如果我只在屏幕的一部分对其进行动画处理,为什么它在 Windows32 中会有所不同,为什么在 Windows32 中它与 iPad 或 Android 平板电脑上的不同?