2012-06-06 129 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