delphi – 在动画TCircle的宽度时如何获得平滑的子像素动画?
发布时间:2020-12-15 09:23:00 所属栏目:大数据 来源:网络整理
导读:当我为TCircle的位置设置动画时,动画是平滑的并且似乎以子像素增量/减量发生.但是,当我为TCircle的宽度(或/和高度)设置动画时,动画以像素为单位递增,使其看起来不那么平滑. 当执行慢动画时,这尤其引人注目,其中位置(X和Y),宽度和高度同时被动画化,从而产生缩
当我为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 解决方法
到目前为止,我似乎已经解决了这个问题,通过更改FMX.Types单元中的以下行,
function FitRect(var R: TRectF; BoundsRect: TRectF): Single; 更改 if ratio < 1 then begin R := RectF(0,RectWidth(R),RectHeight(R)); end else begin R := RectF(0,round(RectWidth(R) / ratio),round(RectHeight(R) / ratio)); end; 成 if ratio < 1 then begin R := RectF(0,RectWidth(R) / ratio,RectHeight(R) / ratio); end; 因此,摆脱回合. 还没有足够的测试来发现副作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |