我是FireMonkey的新手(由其使用Android的新功能所吸引)。我试图用列表框的动画选择项目的动画来揭示底层内容(频繁的模式)。但是,当我为列表框的消失设置动画时,我无法获取列表框来管理取消选择先前选择的项目。奇怪的是,这似乎只发生在Windows平台上,而不是在Android或iPad设备(或iPad模拟器)上。
重现问题(在RAD Studio XE5中):
1)创建一个新的FireMonkey移动应用程序,选择Tablet Master-Detail作为起始布局
2)右键单击Target Platforms,然后 选择32位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按钮三次以添加三个TListBoxItems
12)运行应用程序。单击ListBox中的三个项目之一。 ListBox动画显示在左侧,不在视图范围内。点击我们添加的按钮将其取回。单击其他项目,最终,即使已为ListBox1关闭MultiSelect,也将选中所有三个项目。
13)停止应用。通过将“1”更改为“2”来更改OnItemClick处理程序代码,因此ListBox只会向左移动一半。再次运行该应用程序。现在,当您单击ListBox时,将只选择一个项目,并且将取消选择先前选择的项目(因为它应该是单选列表框)。
同样,如果我在iPad,iPad模拟器或Android平板电脑上运行它,ListBox可以正常工作:当在ListBox中单击某个项目时,将取消选择先前选择的项目。
我不能成为第一个找到这个的人,因为这种动画在应用程序中非常常见。为什么ListBox行为不端,如果我只在屏幕上显示部分动画,为什么它在Windows32中有所不同?为什么它在Windows32中与在iPad或Android平板电脑上有所区别?
答案 0 :(得分:0)
我有同样的问题,带有XE5 Update2的Win32应用程序,向左移出的列表框,然后返回但是有蓝色选择底层的剩余部分。
对我来说很有效(我知道很脏),就是在启动动画后立即启动一个Timer。定时器间隔为100ms
计时器中的代码
if lb_liste.selected is TListBoxItem then
lb_liste.selected.isselected:= false;
// lb_liste是我的列表框,问题可能是没有选择更多的项目,但这对我来说没问题。 之前我在TFloatAnimation的OnProcess事件中有这个部分,但奇怪的是,在我滑回我的列表框之前,只要我以另一种形式与数据库交谈,就会导致AV。
对我来说,这显然是FMX中的一个错误,让我们等待XE6,7,8