Как сдвинуть элемент управления как в iOS в Firemonkey? - PullRequest
2 голосов
/ 10 февраля 2012

У меня есть контроль внутри формы.Это показывает еще один элемент управления поверх него, когда событие происходит, затем оно исчезает и показывает первый элемент управления.

Я хочу иметь плавную анимацию «скольжения / выхода», как это обычно бывает в iOS вместопоявляются / исчезают.

Я вижу, что у firemonkey есть некоторые компоненты анимации, но не знаю, как их использовать.

Ответы [ 3 ]

5 голосов
/ 10 февраля 2012

Абсолютно!

http://docwiki.embarcadero.com/RADStudio/en/FireMonkey_Image_Effects

Несмотря на название, эти эффекты применяются и к элементам управления, а не только к растровым изображениям. Также ознакомьтесь с представленными примерами проектов (эффекты тени)

4 голосов
/ 10 февраля 2012

Посмотрите на функции TFMXObject.AnimateXXX: http://docwiki.embarcadero.com/Libraries/en/FMX.Types.TFmxObject_Functions (TFMXObject является родителем всех элементов управления FireMonkey, поэтому вы можете использовать эти функции для любого элемента управления).

Несколько примеров с использованием AnimateFloat:

Panel1.AnimateFloat('Left', -Panel1.Width);
ListBox1.AnimatFloat('Height', 0, 0.5, TAnimationType.atOut, TInterpolationType.itBounce);
Edit1.AnimatFloat('Opacity', 0, 1);

AnimateFloat анимирует любое свойство с плавающей запятой.Первый параметр - это имя свойства (в виде строки), второе - конечное значение, следующий период времени (в секундах), направление анимации (atIn, AtOut) и, наконец, используемый алгоритм - см. http://docwiki.embarcadero.com/Libraries/en/FMX.Types.TInterpolationTypeдля всех опций.

Вы также получили: AnimateColor (анимировать свойство цвета);AnimateFloatDelay (запустить анимацию после заданной задержки);AnimateFloatWait (дождитесь окончания анимации - полезно для создания цепочек анимаций).

plus, StartAnimation и StopAnimation для использования с анимациями в стиле.

1 голос
/ 16 февраля 2012

Да, используйте функции анимации.

Я создал нечто подобное, оживляя TPanel. Я начинаю с свойства Position.X за пределами экрана и анимирую панель в виде чего-то подобного, где Self - это форма:

Panel1.Align := TAlignLayout.alNone;
Panel1.Position.X := Self.Width + 10;
Panel1.Position.Y := 0;
Panel1.Width := Self.Width;
Panel1.Height := Self.Height;
Panel1.AnimateFloatWait('Position.X', 0, 0.3);

В событии OnResize формы:

Panel1.Align := TAlignLayout.alClient;
...