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

Я пытаюсь изменить компонент джойстика для устройства 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);
}

1 ответ

Решение

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

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

canvas.save()

canvas.rotate(angleOfRectangle)

canvas.drawRectangle(size)

canvas.restore()

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

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

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

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

Другие вопросы по тегам