Нарисуйте кривые для создания стрелок под кодовым названием One GlassPane

#codenameone

#codenameone

Вопрос:

В приложении CodenameOne мне нужно нарисовать изогнутые стрелки на стеклянной панели. Использование GlassPane не обязательно, однако я уже использовал некоторые слои в ContentPane и некоторые слои в LayeredPane, поэтому я полагаю, что GlassPane — лучший вариант, чтобы убедиться, что стрелки находятся «над» приложением.

Стрелки должны быть похожи на следующие:

Стрелка

Стрелка

Я полагаю, что я могу создать алгоритм, который определяет абсолютные координаты X и Y «начальной» и «конечной» точек, а также нескольких других точек (P0, P1, P2 и т.д.), Который Описывает кривые. Например:

Точки линий

Точки линий

Моя проблема в том, что я не знаю, как это сделать. Обычно мне не нужно низкоуровневое рисование в приложении Codename One, как в этом случае. Не могли бы вы, пожалуйста, показать мне правильный и полный код для выполнения этого рисования (предполагая, что я знаю координаты начала, конца, P0, P1 и т.д.)? Спасибо.

Ответ №1:

Это немного сложно сделать вручную. Я бы предложил использовать SVG для рисования подобной стрелки с помощью такого инструмента, как Sketch или аналогичный инструмент векторной графики. Затем с помощью flamingo преобразуйте его в изображение: https://www.codenameone.com/blog/flamingo-svg-transcoder.html

В качестве альтернативы вы можете вручную закодировать его с помощью GeneralPath например:

 GeneralPath gp = new GeneralPath();

// move to start of path
gp.move(x, y);

// draw the curve of the arrow, we use a control point around which
// the curve is drawn and curve to the destination of the line
gp.curveTo(contolX, controlY, destX, destY);

// Stroke defines how the shape is drawn it accepts the line width
// cap style, join style and miter limit
Stroke st = new Stroke(2, Stroke.CAP_SQUARE, Stroke.JOIN_MITER, 1);

// red
graphics.setColor(0xff00000);

// now we can draw the shape
graphics.drawShape(gp, st);