2012-09-25 22 views
23

Quiero diseñar un menú como este.¿Menú radial de Android con el botón clic?

He intentado la animación, pero no conserva la posición de los botones.

si alguien ha hecho este tipo de menú, por favor guíame.

Cualquier ayuda será apreciada.

enter image description here

+1

se refieren a este enlace http://stackoverflow.com/questions/10222730/how-to-create-a-rotating-wheel-control – Bhavika

+0

[Esto] (http://stackoverflow.com/questions/6857505/creating-a-circular-view-in-android) podría ayudar. También consulte [este ejemplo] (http://www.codeproject.com/Articles/146145/Android-3D-Carousel). –

+0

¿Has encontrado la solución? –

Respuesta

8

creo Rotatory wheel in android que le dan idea perfecta a punto de crear este tipo de widget. También es útil para mí. Comprueba también This Example.

+0

Gracias por la respuesta rápida trabajando en ese – MAC

+0

bien amigo ... es mi placer. –

+0

Gracias, pero no es útil para mí – MAC

8

recientemente he creado este menú circular a sumar en mi reciente proyecto. Parece que enter image description here

Lo que necesita es crear una nueva vista y sacar este punto de vista, la verificación de las entradas de usuario (en la que está tocando), el diseño de un mecanismo de retroalimentación, por ejemplo, en mi opinión, si usuario toca cualquiera de los 5 arcos, el color de fondo cambia a azul celeste. Aquí está mi código para onDrawMethod.

protected void onDraw(Canvas canvas) { 
     // TODO Auto-generated method stub 

     px = getMeasuredWidth()/2;  
     py = getMeasuredHeight(); 


     initial = 144; 
     finalangle = 252; 

     centerCircleradius = 30; 
     middleCircleRadius = 140; 




      int init, fina; 
      init = 160;  
      fina = 360; 
      finalOVal.set(px-middleCircleRadius-4, py-middleCircleRadius-4, px+middleCircleRadius+4, py+middleCircleRadius+4); 
      middleOval.set(px-middleCircleRadius, py-middleCircleRadius, px+middleCircleRadius, py+middleCircleRadius); 
      while(init<fina) 
      { 
       circlePaint.setColor(colors[i]); 
       canvas.drawArc(finalOVal,init,10,false, circlePaint); 
       i++; 
       if(i>=colors.length) 
       { 
        i=0; 
       } 
       init = init + 10; 

      } 



      canvas.drawArc(middleOval, 180, 180, false, pencil); 

      midInitial = 180; 


      i=0; 

      //Creating the first Arc 
      if(arcTouched[0]) 
      { 

       canvas.drawArc(middleOval, midInitial, 36, true, arcTouchedBack); 
       canvas.drawArc(middleOval, midInitial, 36, true, pencil); 
      } 
      else 
      { 
       canvas.drawArc(middleOval, midInitial, 36, true, middleCircleBody); 
       canvas.drawArc(middleOval, midInitial, 36, true, pencil); 
      } 
      canvas.drawBitmap(bitmap.get(0), null, (putBitmapTo(midInitial, 36, 140, px, py)), null); 
      midInitial+=36; 

      if(arcTouched[1]) 
      { 

       canvas.drawArc(middleOval, midInitial, 36, true, arcTouchedBack); 
       canvas.drawArc(middleOval, midInitial, 36, true, pencil); 
      } 
      else 
      { 
       canvas.drawArc(middleOval, midInitial, 36, true, middleCircleBody); 
       canvas.drawArc(middleOval, midInitial, 36, true, pencil); 
      } 
      canvas.drawBitmap(bitmap.get(1), null, (putBitmapTo(midInitial, 36, 140, px, py)), null); 
      midInitial+=36; 

      if(arcTouched[2]) 
      { 

       canvas.drawArc(middleOval, midInitial, 36, true, arcTouchedBack); 
       canvas.drawArc(middleOval, midInitial, 36, true, pencil); 
      } 
      else 
      { 
       canvas.drawArc(middleOval, midInitial, 36, true, middleCircleBody); 
       canvas.drawArc(middleOval, midInitial, 36, true, pencil); 
      } 
      canvas.drawBitmap(bitmap.get(2), null, (putBitmapTo(midInitial, 36, 140, px, py)), null); 
      midInitial+=36; 
      //Creatring the second Arc 

      if(arcTouched[3]) 
      { 

       canvas.drawArc(middleOval, midInitial, 36, true, arcTouchedBack); 
       canvas.drawArc(middleOval, midInitial, 36, true, pencil); 
      } 
      else 
      { 
       canvas.drawArc(middleOval, midInitial, 36, true, middleCircleBody); 
       canvas.drawArc(middleOval, midInitial, 36, true, pencil); 
      } 
      canvas.drawBitmap(bitmap.get(3), null, (putBitmapTo(midInitial, 36, 140, px, py)), null); 
      midInitial+=36; 

      if(arcTouched[4]) 
      { 

       canvas.drawArc(middleOval, midInitial, 36, true, arcTouchedBack); 
       canvas.drawArc(middleOval, midInitial, 36, true, pencil); 
      } 
      else 
      { 
       canvas.drawArc(middleOval, midInitial, 36, true, middleCircleBody); 
       canvas.drawArc(middleOval, midInitial, 36, true, pencil); 
      } 
      canvas.drawBitmap(bitmap.get(4), null, (putBitmapTo(midInitial, 36, 140, px, py)), null);   
      canvas.drawCircle(px, py-10, 40, pencil); 
      canvas.drawCircle(px, py-10, 39, smallCircleCore); 

      canvas.drawCircle(px, py-10, 35, bigArc); 
      canvas.drawCircle(px, py-10, 20, smallCircleCore); 

      canvas.drawCircle(px, py-10, 15, bigArc); 
      canvas.drawLine(px-8, py-10, px+8, py-10, lineCore); 

     canvas.save(); 
    } 

Alguna referencia que pueda necesitar.

mapa de bits -> es un ArrayList que contiene imágenes

arcToched [] -> es una matriz que define el fondo de arco, los valores de esta matriz booleana es modificado en onTouchEvent método().

líneaCore, smallCircleCore ..... son pinturas.

Sé que esta no es la mejor manera y tampoco profesional. Creé este menú según las necesidades. No es escalable de ninguna manera hasta que cambie los cálculos de los ángulos.

Esta vista está muy inspirada en la aplicación Catch Notes. El único problema al que me enfrento al crear esta vista fue determinar el arco tocado. La única animación que utilicé aquí es como Catch Notes (una en la que el menú circular se extiende un poco más que el tamaño dado y luego vuelve a la normalidad).

+3

Por favor, publique toda la clase :) – Jitendra

+0

necesito la misma funcionalidad. pero necesito que este menú también se mueva. Significa como marcador. Por favor, ayúdenme ... por favor, por favor, – AnAndroid

+0

el menú se ve impresionante. ¿Puede poner todo el código para que pueda ser útil para todos? –

Cuestiones relacionadas