|
Animation TimeLine
|
|||
---|---|---|---|
#18+
Коллеги, есть вопрос, который мне не понятен. возьмём сферический пример в вакууме: есть элемент управления, к этому элементу управления применяется анимация DoubleAnimation, заданы свойства To = 1, Duration = 2 сек и другие. Стартовое базовое значение свойства = 0; Если мы применим эту анимацию к объекту, то заданное свойство будет изменяться от 0 до 1 оно будет выполняться 2 секунды, следовательно скорость изменения будет равна 1/2 в секунду. В момент, когда анимация достигла 50% выполнения (то есть значение равно = .5) мы запускаем её еще раз и теперь свойство изменяется от 0.5 до 1 за 2 сек, то есть скорость изменения будет уже не 1/2 секунды, а 1/4. Это будет заметно невооруженным глазом. Очевидно, что для повторного запуска нам нужно рассчитать новую скорость и даже если она будет с небольшой погрешностью, это не особо и страшно, но все эти свойства не вычисляемые. И как мне кажется, если объект загружен из XAML, то менять его свойства где то в Runtime, такая себе идея. при этом для расчета времени, от точки C (значение прерванной анимации) до точки B (конечное значение, To), нам нужно знать и точку A (начальное значение, From). В Timeline'е есть еще свойство SpeedRatio, по идее, оно должно решать эту проблему, но если в нашем Storyboard есть несколько анимаций с BeginTime, то их нужно сдвинуть на время, которое стало меньше из-за увеличения SpeedRatio. То есть, сделать по человечески анимацию в чистом XAML с учётом всех этих моментов это какой то геморой, колхоз и говно код. Кто то решал эти задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 08:31 |
|
Animation TimeLine
|
|||
---|---|---|---|
#18+
Roman Mejtes , в своё время самому такое нужно было, но ничего не нашёл. Пришлось делать с использованием C#. Для себя сделал разовое решение через производный класс от DoubleAnimation. Но можно и через AP-свойство. Других вариантов - не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 18:52 |
|
Animation TimeLine
|
|||
---|---|---|---|
#18+
Eld Hasp, я тоже попробовал сделать через анимацию, наследовал от AnimationTimeLine, а не от DoubleAnimation, добавил 2 свойства To и Speed, все работает, но есть одна загвоздка, время выполнения анимации (Duration) определено на базовом классе, следовательно анимация либо будет выполняться фиксированное время, либо непрерывно. 1 случай не подходит, так как время в данном случае значение переменное, а не константное. А во втором случае возникает проблема в том, как эту анимацию остановить. То есть она будет действовать вечно (Forever) и вызывать GetCurrentValue() постоянно, пока анимацию не заместишь другой или null. Есть еще вариант подшаманить с параметром SpeedRatio, он может либо ускорять анимацию, либо замедлять её в N раз. Но такой подход мне кажется абсолютно колхозным. Кроме того, он предполагает, что необходимо знать не только конечное значение, но и начальное, чтоб можно было рассчитать время выполнения и найти коэффициент ускорения. Спасибо, что уделил мне время :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 21:28 |
|
Animation TimeLine
|
|||
---|---|---|---|
#18+
Roman Mejtes , сейчас поздно - искать код не буду. Завтра, если понадобится поищу. Но там всё просто было. Доп. DP-свойство double? Speed - величина изменения в секунду. При задании Speed, From или To был вызов метода. В методе проверялось установка всех трёх свойств. Если установлены, то задавалось время анимации. Вот не помню сейчас как делал при не заданном From. Завтра посмотрю - вспомню. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 23:36 |
|
Animation TimeLine
|
|||
---|---|---|---|
#18+
Roman Mejtes , не знаю насколько поможет вам. Вот моя реализация - использовал для простой демонстрационной аркады. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
Пример использования. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 10:24 |
|
|
start [/forum/topic.php?fid=21&msg=39959750&tid=1440272]: |
0ms |
get settings: |
17ms |
get forum list: |
17ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
41ms |
get topic data: |
22ms |
get forum data: |
1ms |
get page messages: |
212ms |
get tp. blocked users: |
1ms |
others: | 341ms |
total: | 654ms |
0 / 0 |