2012-09-25 33 views
23

Tôi muốn thiết kế menu như thế này.Trình đơn radial android có nút bấm?

Tôi đã thử hoạt ảnh nhưng nó không giữ lại vị trí của các nút.

nếu có ai đã thực hiện loại menu này, vui lòng hướng dẫn tôi.

Mọi trợ giúp sẽ được đánh giá cao.

enter image description here

+1

Tham khảo link này http://stackoverflow.com/questions/10222730/how-to-create-a-rotating-wheel-control – Bhavika

+0

[này] (http://stackoverflow.com/questions/6857505/create-a-circular-view-in-android) có thể hữu ích. Ngoài ra, hãy kiểm tra [ví dụ này] (http://www.codeproject.com/Articles/146145/Android-3D-Carousel). –

+0

Bạn đã tìm ra giải pháp chưa? –

Trả lời

8

Tôi nghĩ Rotatory wheel in android mà cung cấp cho bạn ý tưởng hoàn hảo về để tạo ra loại phụ tùng. Nó cũng hữu ích cho tôi. Cũng cần kiểm tra This Example.

+0

Cảm ơn câu trả lời nhanh chóng làm việc trên rằng – MAC

+0

ok dude .. lời cầu xin của tôi. –

+0

Cảm ơn, nhưng nó không hữu ích cho tôi – MAC

8

Gần đây tôi đã tạo ra trình đơn hình tròn này để thêm lên trong dự án gần đây của tôi. Dường như enter image description here

gì bạn cần là để tạo ra một cái nhìn mới và vẽ quan điểm này, kiểm tra đầu vào người dùng (nơi ông được chạm), thiết kế một cơ chế phản hồi, ví dụ, theo quan điểm của tôi, nếu người dùng chạm bất kỳ của 5 vòng cung, màu nền thay đổi thành màu xanh da trời. Đây là mã của tôi cho 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(); 
    } 

Một số tham chiếu mà bạn có thể cần.

bitmap -> là một ArrayList chứa hình ảnh

arcToched [] -> là một mảng định nghĩa nền cho hồ quang, các giá trị của mảng boolean này được sửa đổi trong onTouchEvent() phương pháp.

dòngCore, smallCircleCore ..... là các loại sơn.

Tôi biết đây không phải là cách tốt nhất và cũng không chuyên nghiệp. Tôi đã tạo menu này theo nhu cầu. Nó không thể mở rộng theo cách cho đến khi bạn thay đổi các phép tính góc.

Chế độ xem này được lấy cảm hứng từ Ứng dụng ghi chú ghi chú. Vấn đề duy nhất tôi phải đối mặt trong việc tạo ra quan điểm này là xác định vòng cung chạm vào. Các hình ảnh động duy nhất tôi sử dụng ở đây là giống như một lần nữa Ghi chú (một trong đó menu tròn kéo dài hơn một chút so với kích thước nhất định sau đó trở lại bình thường).

+3

Vui lòng gửi cả lớp :) – Jitendra

+0

tôi cần chức năng tương tự. nhưng tôi cần rằng trình đơn này nên cuộn also.means như dialer .. hãy giúp tôi .. xin vui lòng – AnAndroid

+0

menu trông awesome.can bạn plz đặt toàn bộ mã để nó có thể hữu ích cho tất cả. –

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