Рисование угловых прямоугольников / дуг на холсте Android

1

Я пытаюсь изменить компонент джойстика для устройства Android. В настоящее время компонент способен отслеживать положение x и y вашего пальца и нарисовать небольшой круг. Теперь то, что я хочу сделать, это нарисовать прямоугольник или дугу от центра до положения x и y вашего пальца.

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

Мне удалось получить прямой прямоугольник, используя canvas.drawLine, но теперь я хочу, чтобы прямоугольник изогнулся с использованием функции drawArc, однако он принимает аргумент RectF.

Мой код, который я использую сейчас:

@Override
protected void onDraw(Canvas canvas) {

    int centerX = (getWidth())/2;
    int centerY = (getHeight())/2;
    Paint p = new Paint();
    p.setColor(buttonColor);

    RadialGradient gradient = new RadialGradient( centerX, centerY, joystickRadius,
    backgroundColor,circleColor, android.graphics.Shader.TileMode.CLAMP);

    //draw an outer circle
    p.setDither(true);
    p.setShader(gradient);
    canvas.drawCircle( (int) centerX, (int) centerY, joystickRadius, p);


    p.setShader(null);
    p.setColor(buttonColor);
    p.setStyle(Paint.Style.FILL);

    //draw the joystick thumbpad
    canvas.drawCircle(x, y, buttonRadius, p);

    // draw a line from the centre of outer circle to the center of the 
    // thumbpad. I want this to be a curved rectangle instead.
    canvas.drawLine( centerX, centerY, x, y, p);
}
  • 0
    Можете ли вы объяснить, что вы подразумеваете под «изогнутым прямоугольником»? Вы пытаетесь нарисовать скругленный прямоугольник? Или вы хотите какую-то дугу из точки в точку.
  • 0
    Я искал способ сделать прямоугольник с закругленными углами теперь, когда я об этом думаю. Первоначально я думал, что это будет то же самое, извините за путаницу.
Теги:
angle
geometric-arc

1 ответ

1
Лучший ответ

Я предполагаю, что вы пытаетесь нарисовать прямоугольник от центра до точки контакта?

Посмотрите на Canvas.save/restore. Некоторые псевдокоды:

canvas.save()

canvas.rotate(angleOfRectangle)

canvas.drawRectangle(size)

canvas.restore()

Идея состоит в том, чтобы сохранить текущее состояние холста, повернуть весь холст, нарисовать ваш прямоугольник, а затем восстановить состояние холста, чтобы "забыть" о вращении ".

[РЕДАКТИРОВАТЬ]

Спасибо Мэтту за исправление.

Надеюсь, поможет...

  • 0
    Привет, спасибо за ответ, это то, что я пытался сделать, я посмотрел на вращение холста, но не смог найти команды сохранения и восстановления. Ура!
  • 0
    Пожалуйста, ура
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню