2

我是 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 平板电脑上的不同?

4

1 回答 1

0

我有同样的问题,带有 XE5 Update2 的 Win32 应用程序,列表框向左移动,然后回来,但蓝色选择底图的其余部分。

什么对我有用(我知道很脏),是在启动动画后立即启动计时器。定时器间隔为 100ms

计时器中的代码

if lb_liste.selected is TListBoxItem then
lb_liste.selected.isselected:= false;

//lb_liste 是我的列表框,一个问题可能是没有选择更多的项目,但这对我来说很好。我之前在 TFloatAnimation 的 OnProcess 事件中有这一部分,但奇怪的是,每当我在滑回我的列表框之前以另一种形式与数据库交谈时,这都会导致 AV。

对我来说,这显然是 FMX 中的一个错误,让我们等待 XE6、7、8

于 2014-02-12T16:45:40.003 回答