在Android画布上绘制有角度的矩形/弧形

时间:2012-06-06 05:26:47

标签: android angle geometric-arc

我正在尝试修改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 个答案:

答案 0 :(得分:1)

我假设您正在尝试从中心到接触点绘制一个矩形?

看看Canvas.save/restore。一些伪代码:

canvas.save()

canvas.rotate(angleOfRectangle)

canvas.drawRectangle(size)

canvas.restore()

我们的想法是保存当前画布状态,旋转整个画布,绘制矩形,然后将画布状态恢复为“忘记”旋转“。

[编辑]

感谢Matt的纠正。

希望它有所帮助...