为什么滚动TListView调用整个表单重绘 - Delphi Firemonkey

时间:2014-02-04 16:22:51

标签: delphi firemonkey delphi-xe5

从空白移动应用开始,我添加了TlistViewTCircleTMemo。除了默认值之外,没有任何控件具有任何对齐,它们都是主窗体的直接子窗口。

在ListView的OnPaint事件中,我把它放在:

Memo1.Lines.Add('ListView paint'), 

对于圆圈OnPaint:

Memo1.Lines.Add('Circle paint');

当我运行应用程序时,结果是滚动listview导致大量“Listview paint”和“Circle paint”被添加到备忘录中,两个项目总是同时添加。为什么滚动列表视图(或滚动备忘录)会调用整个表单重绘?

调用堆栈中有一行让我觉得整个表单都被重新绘制了:

Fmx.Platform.Ios.TFMXView3D.drawRect(0x14659ec0,{origin = {x = 0, y = 0}, size = {width = 768, height = 1024}})

我想知道这是否应该发生。这导致我的listivew表现不佳,因为图表不断重新粉刷。

1 个答案:

答案 0 :(得分:1)

根据评论判断,这似乎是Firemonkey的一个问题,但它已被指定为设计。来自QC issue

  

在移动平台上使用的FireMonkey中的GPU Canvas总是重新绘制整个表单,这是设计的。

     

作为一种解决方法,有TRasterEffect,可以在表单上删除并作为其中一个控件的父级。如果这样做,控件将首先渲染到内部图像,然后绘制这样的图像,以缓解问题。