2012-06-06 6 views
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

Могут ли вы объяснить, что вы имеете в виду под «изогнутым прямоугольником»? вы пытаетесь нарисовать Rounded прямоугольника? Или вам нужна какая-то дуга от точки к точке. – cemulate

+0

Я искал способ сделать круглый прямоугольник, теперь, когда я думаю об этом. Я изначально думал, что это будет одно и то же, извините за путаницу. – Andrew

ответ

1

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

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

canvas.save() 

canvas.rotate(angleOfRectangle) 

canvas.drawRectangle(size) 

canvas.restore() 

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

[EDIT]

Спасибо за Мэтт для коррекции.

Надеется, что это помогает ...

+0

Привет, Спасибо за ответ, что я пытался сделать, я искал поворот холста, но не смог найти команды сохранения и восстановления. Ура! – Andrew

+0

Приветствую вас, приветствия – Simon

+0

Не должен ли 'canvas.drawRectangle()' быть после 'canvas.rotate()'? По крайней мере, это то, что работает для меня. – Matt

 Смежные вопросы

  • Нет связанных вопросов^_^