2012-09-25 9 views
23

Ich möchte Menü wie folgt gestalten.Radial menu android mit taste klicken?

Ich habe versucht, Animation, aber es behält nicht die Position der Tasten.

Wenn jemand diese Art von Menü getan haben, bitte führe mich.

Jede Hilfe wird geschätzt.

enter image description here

+1

Siehe diesen Link http://stackoverflow.com/questions/10222730/how-to-create-a-rotating-wheel-control – Bhavika

+0

[Dies] (http://stackoverflow.com/questions/6857505/creating-a-circle-view-in-android) könnte helfen. Überprüfen Sie auch [dieses Beispiel] (http://www.codeproject.com/Articles/146145/Android-3D-Carousel). –

+0

Haben Sie die Lösung gefunden? –

Antwort

8

Ich denke Rotatory wheel in android, die Ihnen perfekte Idee geben, über diese Art von Widgets zu erstellen. Es ist auch hilfreich für mich. Prüfen Sie auch für This Example.

+0

Danke für die schnelle Antwort arbeitet daran – MAC

+0

ok dude .. es ist mein Vergnügen. –

+0

Danke, aber es ist nicht hilfreich für mich – MAC

8

ich vor kurzem dieses Kreis Menü erstellt in meinem letzten Projekt zu addieren. Es sieht aus wie enter image description here

Was brauchen Sie eine neue Ansicht zu erstellen und diese Ansicht ziehen, überprüfen Sie die Benutzereingaben (wo er berührt), die Gestaltung eines Feedback-Mechanismus, zum Beispiel, aus meiner Sicht, wenn der Benutzer berührt jeder der 5 Bögen ändert sich die Hintergrundfarbe zu skyblue. Hier ist mein Code für 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(); 
    } 

Einige Referenz, die Sie benötigen.

Bitmap -> ist ein Arraylist, das Bilder enthält

arcToched [] -> ist eine Anordnung, die den Hintergrund für das Lichtbogen definiert, wobei die Werte dieser Booleschen Array in onTouchEvent modifiziert wird() Methode.

lineCore, smallCircleCore ..... sind Farben.

Ich weiß, das ist nicht der beste Weg und auch nicht professionell. Ich habe dieses Menü nach Bedarf erstellt. Es ist in gewisser Weise nicht skalierbar, bis Sie die Winkelberechnungen ändern.

Diese Ansicht ist stark von Catch Notes Application inspiriert. Das einzige Problem, mit dem ich bei der Erstellung dieser Ansicht konfrontiert wurde, war die Bestimmung des berührten Bogens. Die einzige Animation, die ich hier verwendet habe, ist genau wie bei Catch Notes (die, in der sich das kreisförmige Menü ein wenig mehr erweitert als die angegebene Größe, dann wieder normal wird).

+3

Bitte schreiben ganze Klasse :) – Jitendra

+0

Ich brauche die gleiche Funktionalität. aber ich brauche, dass dieses Menü auch scrollen sollte. wie Dialer ... bitte helfen Sie mir ... bitte bitte – AnAndroid

+0

Menü sieht awesome.can Sie PLZ setzen ganzen Code, so dass es für alle hilfreich sein kann. –