Как стать автором
Обновить

Комментарии 23

Насколько такая анимация эффективнее вращения всей картинки целиком?

Так-то не эффективнее от слова совсем, намного лучше статически сверстать и RenderTransform потом анимировать.

Ещё бы добавить в статью хотя бы немного про стилизацию. Например, как потребителю компонента сделать другой цвет, как изменить размеры этого контрола, почему контрол создаётся в одном месте, а стиль для него регистрируется в другом.
В данном случае я не посчитал это нужным, на мой взгляд у меня уже есть статья в которой я рассказывал как, опираясь на псевдоклассы разметки менять ее свойства тут или же сам туториал авалонии по стилям тут

А по поводу второго вопроса
почему контрол создаётся в одном месте, а стиль для него регистрируется в другом


Возможно я действительно не раскрыл тему. Такой подход является более гибким. xaml файл проще к редактированию, легче группировать визуализацию из xaml файлов, чем хардкодить все в реальном классе контрола. Да и к тому же, задать в xaml анимацию куда проще, чем ее прописывать в C# коде.

Но конечно сложные конролы требуют комбинации из xaml и c#
к примеру

А не слишком ли громоздкий велосипед? Не проще обычную анимированную гифку показывать без подключения кучи библиотек и возможностей? Не забивание ли это гвоздей микроскопом?

Тут будет один ответ для вас и пользователя Deosis
Да можно вращать картинку, да можно добавить гиф анимацию
Но такой конечный подход делает контрол куда более гибким.
Т.е. вы можете написать контрол и использовать его во всех своих проектах, лишь добавляя сверху в стили окна нужный цвет или градиент. Добавить к этой анимации еще какую-то, а гиф и картинку каждый раз придется переделывать с 0.

Вы на полном серьезе предлагаете делать прелоадер, захардкодив 8 элементов и 64 кейфрейма для них? Это же автоматизируется в 10 строчек кода...

Я с удовольствием посмотрю на то что вы предлагаете
И нет, не захардкодив, благодаря стилизации авалонии их можно легко поменять
Я честно не знаю каким образом сделать это лучше
В качестве основы для своей версии я брал различные вариации прелоадеров на css/js

Это хардкод, потому что элементов четко восемь, а у каждого по четко восемь ключевых кадров. Как вы определили, что у Cue="0%" должно быть значение 0.17, у Cue="14%"0.34, и так далее? Как вычислили положение каждой точки на Canvas? Неужели вручную на бумажке? Если я захочу поменять скорость анимации, или начальное положение, или сделать больше\меньше точек — мне придется снова пересчитать руками все коэффициенты?


Напрашивается мысль, что все это можно было бы не описывать декларативно в виде XML, а сгенерировать программно в цикле, основываясь на трех переменных — числе точек, скорости анимации (количестве "поворотов" в секунду") и изначальном положении.

да, только у такой штуки возникнет проблема с тем
что навешать дополнительные анимации вне контрола будет невозможно
Или крайне затруднительно

Так что на мой взгляд это 2 равноценных стула, которые оставят полностью свободу выбора для пользователя

Что за дополнительные анимации, которые нужно навешивать вне контрола, и зачем это делать?

если собрать контрол в конечную dll а лучше nuget
и предоставлять юзерам, в вашем раскладе юзеру будет не очень удобно (насколько я понимаю практически невозможно) что то поменять в системе анимаций цветов форм и размеров
Либо же я не понимаю ваше решение

Все настраиваемые переменные, а также ControlTemplate для "кружка" можно выставить из компонента в виде AvaloniaProperty. Для пользователя это будет и проще, и удобнее, чем полностью переопределять ControlTemplate.

как я только что ответил ниже
как мне кажется кейс при котором я захочу перекрасить каждый кружок отдельно достаточно популярен
codepen.io/sashatran/pen/vRrxXw

но быть может вы и правы
я подумаю об этом, попробовав реализовать альтернативную версию
если у вас есть заготовка на гите — можете поделиться — мне будет приятно и интересно
спасибо

Давайте исходить из реальных задач, вряд ли я захочу менять скорость или начальное положение круглиха в этом контроле.

но цвет скорее всего захотите
и возможно каждого в отдельности
в решении impwx я пока не представляю как это сделать

но мб я плохо представляю его решение

Цвет целиком меняется стилем, а если у вас такой странный брендбук, что надо сделать 8 разноцветных круглишков прозрачного цвета, то не очень мне это кажется реальной ситуацией, тогда уж придется делать свой контрол

codepen.io/sashatran/pen/vRrxXw
вот такая анимация
и каждый юзер может захотеть в свой цвет

Можно сделать метод создания кругляшка виртуальным и позволить переопределить его при наследовании. Тогда можно будет сделать и разноцветные кружки, и линию вместо круга, и вообще что угодно.

скорее лучше получить возможность переопределять темплейт одной фигуры
спасибо это любопытно
попробую учесть сказанное и переделать контрол

Задача вполне реальная: дизайнер нарисовал, нужно сверстать пиксель-в-пиксель.

Мы уходим не туда, но дизайнер не последнее слово. Если его предложение стоит стопяцот часов, очень быстро появится другой макет.
Здесь есь же речь идёт о среднестатистическом готовом решении и демонстрации возможностей платформы.
И при этом перенос анимации в универсальный код с тремя переменными все эти вопросы все так же не решает

Если поменять скорость прелоадера занимает 100500 часов, и поэтому нужно заново дизайнить и утверждать макет — вопросы будут к программисту, а не к дизайнеру.


Возможности платформы гораздо нагляднее показало бы гибкое, кастомизируемое решение.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории