2012-02-09 39 views
13

Tôi muốn vẽ loại vòng kết nối này trong ứng dụng của mình. Tôi có thể vẽ vòng tròn bằng Canvas nhưng tôi không thể có bất kỳ ý tưởng nào về cách tạo phân vùng?Làm thế nào để vẽ vòng tròn với phân vùng trong android?

Có ai có thể đề xuất cho tôi cách tôi có thể chia nhỏ vòng kết nối không?

enter image description here

Chỉnh sửa: - Tôi muốn vẽ dòng có trong vòng tròn bên trong.

enter image description here

Cảm ơn trước.

Trả lời

14

Dưới đây là đoạn code làm việc cho yêu cầu của bạn ....

Chỉnh sửa mã: -

Paint paint1 = new Paint(); 
     Paint paint2 = new Paint(); 
     Paint paint3 = new Paint(); 
     Paint paint4 = new Paint(); 
     Paint paint5 = new Paint(); 
     final RectF rect = new RectF(); 
     int mRadius = 130; 
     //Example values 
     rect.set(getWidth()/2- mRadius, getHeight()/2 - mRadius, getWidth()/2 + mRadius, getHeight()/2 + mRadius); 
     paint1.setColor(Color.GREEN); 
     paint1.setStrokeWidth(mRadius/2); 
     paint1.setAntiAlias(true); 
     paint1.setStrokeCap(Paint.Cap.BUTT); 
     paint1.setStyle(Paint.Style.STROKE); 
     paint2.setColor(Color.RED); 
     paint2.setStrokeWidth(mRadius/2); 
     paint2.setAntiAlias(true); 
     paint2.setStrokeCap(Paint.Cap.BUTT); 
     paint2.setStyle(Paint.Style.STROKE); 
     paint3.setColor(Color.BLUE); 
     paint3.setStrokeWidth(5); 
     paint3.setAntiAlias(true); 
     paint3.setStrokeCap(Paint.Cap.BUTT); 
     paint3.setStyle(Paint.Style.STROKE); 
     canvas.drawArc(rect, 0, 60, false, paint1); 
     canvas.drawArc(rect, 60, 60, false, paint2); 
     canvas.drawArc(rect, 120, 60, false, paint1); 
     canvas.drawArc(rect, 180, 60, false, paint2); 
     canvas.drawArc(rect, 240, 60, false, paint1); 
     canvas.drawArc(rect, 300, 60, false, paint2); 

     canvas.drawLine(getWidth()/2, 
       getHeight()/2, getWidth()/2-mRadius/2, getHeight()/2-mRadius/2,paint3); 

     canvas.drawLine(getWidth()/2, 
       getHeight()/2, getWidth()/2+mRadius/2, getHeight()/2-mRadius/2,paint3); 

     canvas.drawLine(getWidth()/2, 
       getHeight()/2, getWidth()/2-mRadius/2, getHeight()/2+mRadius/2,paint3); 

     canvas.drawLine(getWidth()/2, 
       getHeight()/2, getWidth()/2+mRadius/2, getHeight()/2+mRadius/2,paint3); 

     canvas.drawLine(getWidth()/2, 
       getHeight()/2, getWidth()/2-mRadius/4-mRadius/2, getHeight()/2,paint3); 

     canvas.drawLine(getWidth()/2, 
       getHeight()/2, getWidth()/2+mRadius/4+mRadius/2, getHeight()/2,paint3); 

     paint4.setColor(Color.BLACK); 

     canvas.drawCircle(getWidth()/2, getHeight()/2, mRadius/2, paint4); 

     paint5.setColor(Color.YELLOW); 
     paint5.setStrokeWidth(3); 
     paint5.setAntiAlias(true); 
     paint5.setStrokeCap(Paint.Cap.BUTT); 
     paint5.setStyle(Paint.Style.STROKE); 
     canvas.drawCircle(getWidth()/2, getHeight()/2, mRadius/2, paint5); 

tôi hy vọng bây giờ bạn hài lòng với câu trả lời của tôi ....

+0

Hey himanshu bạn có thể cho tôi biết nếu tôi muốn vẽ một đường đơn giản theo vòng tròn này thì làm thế nào tôi có thể? Tôi đã cố gắng hết sức nhưng tôi không thể tìm thấy sai lầm của mình. Tôi đã đăng hình ảnh mà tôi muốn làm. Cảm ơn trước – anddev

+0

có nghĩa là bạn chỉ muốn hiển thị vòng? – himanshu

+0

ok tôi hiểu những gì bạn muốn, cho tôi một thời gian. Tôi sẽ thử nó. – himanshu

4

Tôi có một ý tưởng đầu tiên vẽ vòng tròn bên trong với phân vùng sử dụng giá trị góc

 can.drawArc(oval, startAngle, sweepAngle, useCenter, paint) 

Đưa như 0 t0 60, và sau đó một lần nữa vẽ một vòng cung với cùng một giá trị góc trung tâm mất 60-120 và vân vân. Mỗi lần thiết lập màu sắc khác nhau trong Paint.Sau khi hoàn thành vòng tròn bên trong, gần như tất cả các công việc done.Now vẽ vòng tròn màu trắng với cùng một trung tâm nhưng bán kính nhỏ sau khi vòng tròn đầu tiên.So nó sẽ tạo ra trên đầu tiên

Hy vọng nó sẽ giúp bạn :)

+0

Bạn có ý tưởng gì không? – Sameer

+0

Cảm ơn Sameer đã trả lời nhanh chóng, tôi có ý tưởng của bạn nhưng bạn có thể cho tôi biết giá trị của tham số hình bầu dục không? – anddev

+1

cho cũ RectF rect = new RectF (100,100,130,140); can.drawArc (rect, 0.0f, 60.0f, true, new Paint()); và nếu bạn có bất kỳ ý tưởng nào từ câu trả lời nào thì hãy học cách đánh giá cao nó bằng cách bỏ phiếu – Sameer

0

Bạn có thể quay lại chênh từ here Nó câu hỏi gần như giống nhau có sẵn trên trang web ...

+0

Cảm ơn Himanshu cho liên kết. Trên thực tế tôi đã tìm kiếm nhưng tôi đã không loại ví dụ này vì vậy tôi đăng câu hỏi của riêng tôi. BTW có bạn bất kỳ loại ý tưởng yêu cầu của tôi sau đó xin vui lòng chia sẻ với tôi. – anddev

+0

xem câu trả lời của tôi dưới đây, sử dụng nó và cho tôi biết .... – himanshu

0

Hey tôi tìm thấy giải pháp truy vấn của tôi,

final RectF rect1 = new RectF(); 
int mWidth = this.getWidth()/2; 
int mHeight = this.getHeight()/2; 
int mRadius = 130, mRadius1 = 50; 
rect1.set(mWidth -(mRadius-mRadius1), mHeight - (mRadius-mRadius1), mWidth + (mRadius-mRadius1), mHeight + (mRadius-mRadius1)); 

Paint paintLines = new Paint(); 
paintLines.setColor(Color.BLACK); 
paintLines.setStrokeWidth((mRadius-mRadius1)/2); 
paintLines.setAntiAlias(false); 
paintLines.setStrokeCap(Paint.Cap.BUTT); 
paintLines.setStyle(Paint.Style.STROKE); 

canvas.drawArc(rect1, 0, 1, false, paintLines); 
canvas.drawArc(rect1, 30, 1, false, paintLines); 
canvas.drawArc(rect1, 60, 1, false, paintLines); 
canvas.drawArc(rect1, 90, 1, false, paintLines); 
canvas.drawArc(rect1, 120, 1, false, paintLines); 
canvas.drawArc(rect1, 150, 1, false, paintLines); 
+0

Tôi cũng đã chỉnh sửa mã của tôi.Xem nó ... – himanshu

+0

Có tôi thấy rằng cảm ơn himanshu. Bạn có biết cách sử dụng chức năng phóng to trong canvas không? – anddev

+0

Tôi đã yêu cầu google và tôi đã sử dụng mã này http://vivin.net/2011/12/04/implementing-pinch-zoom-and-pandrag-in-an-android-view-on-the-canvas/ và thu phóng đang hoạt động nhưng nó không cuộn đúng cách. Tôi sẽ phóng to chỉ ở một bên của màn hình. – anddev

Các vấn đề liên quan