2012-02-09 18 views
13

Quiero dibujar este tipo de círculo en mi aplicación. ¿Puedo dibujar un círculo usando Canvas pero no puedo tener una idea acerca de cómo hacer particiones?Cómo dibujar un círculo con particionado en Android?

¿Alguien me puede decir cómo puedo dividir el círculo?

enter image description here

Editar: - Quiero llamar la línea de los que están en el círculo interior.

enter image description here

Gracias de antemano.

Respuesta

14

es el código de trabajo para sus necesidades .... Aquí

Edición del código: -

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); 

I esperamos que ahora se satisface con mi respuesta ....

+0

Hey himanshu ¿Puedes decirme si quiero dibujar líneas simples de acuerdo con este círculo, entonces cómo puedo? Lo intenté por mi parte, pero no puedo encontrar mi error. Publiqué la imagen que quiero hacer. Gracias de antemano – anddev

+0

línea significa que solo quieres mostrar el anillo? – himanshu

+0

ok entiendo lo que quieres, dame algo de tiempo. Lo intentaré. – himanshu

4

I tienen una idea primero dibujar círculo interior con partición utilizando valor de ángulo

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

Take como 0 t0 60, y luego de nuevo sacar otra arco con mismo valor de ángulo centro de toma de 60 a 120 y así sucesivamente. Cada vez que coloque un color diferente en Paint.After finalización del círculo interior, casi todo el trabajo realizado.Ahora dibuje un círculo blanco con el mismo centro pero pequeño radio después del primer círculo.Así que creará más de

Espero que le ayude :)

+0

¿Tuviste alguna idea? – Sameer

+0

Gracias Sameer por la respuesta rápida, sí, tengo su idea, pero ¿me puede decir el valor del parámetro oval? – anddev

+1

para ex RectF rect = new RectF (100,100,130,140); can.drawArc (rect, 0.0f, 60.0f, verdadero, nuevo Paint()); y si tienes alguna idea de alguna respuesta, entonces aprende a apreciarla al renunciar al voto – Sameer

0

Puede tomar re ferencia de here .Es la casi misma pregunta en el sitio ...

+0

Gracias Himanshu por el enlace. En realidad, busqué pero no hice este tipo de ejemplo, así que publiqué mi propia pregunta. Por cierto tengo algún tipo de idea de mis requisitos, por favor, comparta conmigo. – anddev

+0

ver mi respuesta a continuación, úsala y házmelo saber ... – himanshu

0

Hey he encontrado la solución de mi consulta,

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

También he editado mi código. Véalo ... – himanshu

+0

Sí, vi eso gracias himanshu. ¿Sabes cómo usar la funcionalidad de zoom en el lienzo? – anddev

+0

Pedí google y usé este código http://vivin.net/2011/12/04/implementing-pinch-zoom-and-pandrag-in-an-android-view-on-the- canvas/ y zoom está funcionando pero no se desplaza correctamente. Voy a hacer zoom solo en un lado de la pantalla. – anddev

Cuestiones relacionadas