2012-09-25 6 views
23

Voglio progettare un menu come questo.Menu radiale Android con clic del tasto?

Ho provato l'animazione ma non mantiene la posizione dei pulsanti.

se qualcuno ha fatto questo tipo di menu per favore guidami.

Qualsiasi aiuto sarà apprezzato.

enter image description here

+1

Fare riferimento a questo link http://stackoverflow.com/questions/10222730/how-to-create-a-rotating-wheel-control – Bhavika

+0

[Questo] (http://stackoverflow.com/questions/6857505/creating-a-circular-view-in-android) potrebbe aiutare. Controlla anche [questo esempio] (http://www.codeproject.com/Articles/146145/Android-3D-Carousel). –

+0

Hai trovato la soluzione? –

risposta

8

Penso Rotatory wheel in android che vi danno perfetta idea di creare questo tipo di widget. È anche utile per me. Controllare anche per This Example.

+0

Grazie per la risposta rapida lavorando su quel ragazzo – MAC

+0

ok .. è il mio piacere. –

+0

Grazie, ma non è utile per me – MAC

8

Recentemente ho creato questo menu circolare di aggiungere nel mio recente progetto. Sembra enter image description here

Quello che vi serve è quello di creare una nuova vista e disegnare questo punto di vista, controllare gli input dell'utente (dove è a contatto), la progettazione di un meccanismo di feedback, per esempio, a mio avviso, se tocchi utente uno qualsiasi dei 5 archi, il colore di sfondo cambia in azzurro. Ecco il mio codice per 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(); 
    } 

Alcuni riferimenti che potrebbero essere necessari.

bitmap -> è un arraylist contenente immagini

arcToched [] -> è una matrice che definisce il fondo per l'arco, i valori di questa matrice booleana viene modificato in onTouchEvent metodo().

lineCore, smallCircleCore ..... sono vernici.

So che questo non è il modo migliore e non anche professionale. Ho creato questo menu secondo necessità. La sua scala non è in grado in un modo finché non si modificano i calcoli dell'angolo.

Questa visualizzazione è fortemente ispirata all'applicazione Catch Notes. L'unico problema che ho riscontrato nella creazione di questa vista è stato determinare l'arco toccato. L'unica animazione che ho usato qui è come ancora Catch Notes (quella in cui il menu circolare si estende un po 'più delle dimensioni date poi torna normale).

+3

Gentilmente post intero classe :) – Jitendra

+0

ho bisogno della stessa funzionalità. ma ho bisogno che questo menu dovrebbe scorrere anche come dialer ... per favore aiutatemi ... per favore, il menu – AnAndroid

+0

sembra fantastico. potete inserire tutto il codice in modo che possa essere utile a tutti. –