#заметка дня
Я подумал, раз уж выкатил выше
видео с пультом на Flutter, почему бы не рассказать о процессе создания некоторых элементов оттуда.
Чтобы не напрягать всех лишний раз, примеры будут на JavaScript и Canvas. Ну, вдруг кому-то пригодится нечто похожее.
Да и выглядит такой код чуток попроще, чем на CustomPainter во Flutter (хотя по факту-то тоже просто холст).
Итак, для пульта я решил сделать D-pad (он же джойстик или directional pad). На моём пульте он состоит из четырех кнопок по кольцу и одной центральной.
Чаще всего, d-pad-ом назыв
ают всем известную крестовину, которая не всегда обладает отдельным
центром.
Проще всего достичь такого эффекта, разделив весь круг на четыре сектора. Каждый сектор — это дуга, занимающая угол
90°. Чтобы они визуально отделялись, добавляем контуры между дугами, а поверх всего накладываем центральный круг — он становится кнопкой.
Для корректного размещения делим полный угол 360° на количество дуг — четыре — и задаём начальный угол сдвига -45°. Он нужен, чтобы первый сектор смотрел строго вверх.
А то а чо он.В результате получаем симметричный D-pad, где каждый сегмент и центр выделены визуально:
https://codepen.io/alinaki/pen/oNKmxNe?editors=0010Ладно, ладно. Это на бумаге кажется, что всё действительно просто. На деле же я жёстко тупил.
1. Я не очень понимал, как обрабатывать клики, поэтому думал в сторону пяти отдельных элементов. А значит, об уравнении арки.
2. Потом я никак не мог врубиться, как же мне сделать отступы одинаковой ширины. Мысль, что это просто контур, граница, вообще не сразу мне в голову пришла.
3. Вроде, в школе учат, как определять, попала ли точка в контур, заданный неким уравнением, но вспоминаешь это тоже далеко не сразу.
В следующих постах расскажу, как решил уравнение в пункте 3, добавив подсветку нужного сегмента при нажатии.
Не переключайтесь, котаны!
#canvas #paint #remote