Рисование угловых прямоугольников / дуг на холсте 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()
Идея состоит в том, чтобы сохранить текущее состояние холста, повернуть весь холст, нарисовать прямоугольник, а затем восстановить состояние холста, чтобы "забыть" о вращении.
[РЕДАКТИРОВАТЬ]
Спасибо за Мэтта за исправление.
Надеюсь, поможет...