2012-06-06 218 views
1

我正在尝试修改android设备的操纵杆组件。目前,该组件能够跟踪手指的x和y位置并在那里画一个小圆圈。现在我想要做的是从中心向手指的x和y位置绘制一个矩形或弧线。在Android画布上绘制直角矩形/弧形

据我所知,该矩形只需要顶部,左侧,右侧和底部的值,只允许我绘制矩形水平或垂直。如果有人知道另一种方式来绘制这将是太棒了。

我设法得到了一个使用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

你能解释一下你所说的“弯曲矩形”是什么意思?你们是不是要画一个圆角的矩形?或者你想从点到点的某种弧。 – cemulate

+0

我正在寻找一种方法来做一个圆角矩形,现在我想到了它。我最初以为这会是一样的,对于混乱感到抱歉。 – Andrew

回答

1

我假设你正在尝试绘制从中心到接触点的矩形?

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

canvas.save() 

canvas.rotate(angleOfRectangle) 

canvas.drawRectangle(size) 

canvas.restore() 

的想法是保存当前画布状态,旋转整个画布,画你的矩形,然后恢复画布状态“忘记”绕旋转”

[编辑]

感谢马特的修正。

希望它可以帮助...

+0

嗨,感谢我正在尝试做的答案,我曾考虑旋转画布,但未能找到保存和恢复命令。干杯! – Andrew

+0

不客气,欢呼声 – Simon

+0

'canvas.drawRectangle()'不应该放在'canvas.rotate()'后面吗?至少这是对我有用的东西。 – Matt