#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);