2012-09-04 45 views
1

我使用自定義視圖,我創建了一個圈:使用畫布將圓形轉換爲圓環?

canvas.drawCircle(width/2, width/2, radius, paint1); 

現在,我要清空圈由內,像a ring

繪製另一個較小的白色圓圈會引發另一個問題。我打算讓我的觀點傾聽用戶的點擊。我只想聽聽環上的點擊!

有沒有辦法排除畫布的某些部分?

+0

沒有測試,但嘗試繪製與油漆透明度小了一圈。 – Carnal

+0

如果您的意思是將油漆顏色設置爲透明'paint.setColor(Color.TRANSPARENT);'。是的,我嘗試過。它什麼也沒畫! – iTurki

+1

是的,這是我的觀點,但它似乎並沒有工作,然後; P – Carnal

回答

0

我工作解決該問題通過繪製內白色圓圈和過濾基於兩個半徑長度我有點擊。

所以,你不能繪製一個空的圓圈,但你可以做一個圓圈表現得像一個空的圓圈。

謝謝。

0

要繪製環,使用drawArc:

RectF oval = new RectF(width/2 - radius, width/2 - radius, width/2 + radius, width/2 + radius); 
canvas.drawArc(oval, 0, 360, false, paint1); 
+0

這將繪製一個完整的循環!重點是什麼? – iTurki

+0

一環。它畫了一個戒指。現在編輯 – njzk2

+0

它畫CIRCLE老兄!你基本上是用360度繪製[弧線](http://en.wikipedia.org/wiki/Arc_%28geometry%29)。 – iTurki

9

爲了畫一個圈(即,不填寫,但只是有一個邊界,裏面透明的區域圓)做到這一點:

Paint myPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
myPaint.setStyle(Paint.Style.STROKE); 
int strokeWidth=4; // or whatever 
myPaint.setStrokeWidth(strokeWidth); 
myPaint.setColor(0xffff0000); //color.RED 
float radius=(float) (0.5*(w+h)*0.5); 
canvas.drawCircle((float)0.5*w, (float)0.5*h, radius, myPaint); 

以畫圓的調用也被替換通過drawArc像下面的代碼。這兩種方法都可行。祕訣就是將繪畫風格設置爲Paint.Style.STROKE。

RectF oval = new RectF(w/2 - radius, w/2 - radius, w/2 + radius, w/2 + radius); 
canvas.drawArc(oval, 0, 360, false, myPaint); 
0

該解決方案的工作原理:

Paint paintPath; 

int circleRadius = (int) 
    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, context.getResources() 
    .getDisplayMetrics()); 

paintPath = new Paint(); 
paintPath.setStrokeWidth(circleRadius); 
paintPath.setColor(Color.WHITE); 
paintPath.setStyle(Paint.Style.FILL_AND_STROKE); 
paintPath.setAntiAlias(true); 
paintPath.setPathEffect(null); 
paintPath.setRasterizer(null); 

內上繪製

RectF rectF = new RectF(centerx - radius, centery - radius, 
    centerx + radius, centery + radius); 

Path myPath = new Path(); 
for (int i = 0; i <= 360; i += 1) 
{ 
    myPath.addArc(rectF, i, 1); 
} 
canvas.drawPath(myPath, paintPath);