Я пытаюсь изменить компонент джойстика для устройства 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);
}
Я предполагаю, что вы пытаетесь нарисовать прямоугольник от центра до точки контакта?
Посмотрите на Canvas.save/restore. Некоторые псевдокоды:
canvas.save()
canvas.rotate(angleOfRectangle)
canvas.drawRectangle(size)
canvas.restore()
Идея состоит в том, чтобы сохранить текущее состояние холста, повернуть весь холст, нарисовать ваш прямоугольник, а затем восстановить состояние холста, чтобы "забыть" о вращении ".
[РЕДАКТИРОВАТЬ]
Спасибо Мэтту за исправление.
Надеюсь, поможет...