当我为TCircle的位置设置动画时,动画是平滑的并且似乎以子像素增量/减量发生。但是,当我为TCircle的宽度(或/和高度)设置动画时,动画以像素为单位递增,使其看起来不那么平滑。
在执行慢动画时,这尤其引人注目,其中位置(X和Y),宽度和高度同时进行动画处理,从而创建缩放效果。圆圈的左上部和上部平滑向外,而右下部分则生涩。
无法弄清楚为什么会这样。所有建议都非常赞赏。
(顺便说一句,当Scale.X和Scale.Y被动画化时不会发生这种情况。平滑。但我不希望笔划粗细缩放,因此使用宽度和高度)
(使用XE2)
一些用于演示的TForm代码:
object Form6: TForm6
Left = 0
Top = 0
Caption = 'Form6'
ClientHeight = 821
ClientWidth = 1108
Visible = False
StyleLookup = 'backgroundstyle'
object cirPulse: TCircle
Position.Point = '(352,192)'
Width = 200.000000000000000000
Height = 200.000000000000000000
Fill.Kind = bkNone
StrokeThickness = 10.000000000000000000
object FloatAnimation1: TFloatAnimation
Enabled = True
Duration = 50.000000000000000000
StartFromCurrent = True
StopValue = 400.000000000000000000
PropertyName = 'Width'
end
object FloatAnimation2: TFloatAnimation
Enabled = True
Duration = 50.000000000000000000
StartFromCurrent = True
StopValue = 400.000000000000000000
PropertyName = 'Height'
end
object FloatAnimation3: TFloatAnimation
Enabled = True
Duration = 50.000000000000000000
StartFromCurrent = True
StopValue = 252.000000000000000000
PropertyName = 'Position.X'
end
object FloatAnimation4: TFloatAnimation
Enabled = True
Duration = 50.000000000000000000
StartFromCurrent = True
StopValue = 92.000000000000000000
PropertyName = 'Position.Y'
end
end
end
答案 0 :(得分:5)
到目前为止,我似乎已经解决了这个问题,通过更改FMX.Types单元中的以下行,
function FitRect(var R: TRectF; BoundsRect: TRectF): Single;
更改
if ratio < 1 then
begin
R := RectF(0, 0, RectWidth(R), RectHeight(R));
end
else
begin
R := RectF(0, 0, round(RectWidth(R) / ratio), round(RectHeight(R) / ratio));
end;
到
if ratio < 1 then
begin
R := RectF(0, 0, RectWidth(R), RectHeight(R));
end
else
begin
R := RectF(0, 0, RectWidth(R) / ratio, RectHeight(R) / ratio);
end;
因此,摆脱Round
。
Haven已经足够测试以发现副作用。