2014-03-05 72 views

回答

0

我建议建立一个自定义组件和压倒一切的onTouch(View, MotionEvent)。在该方法中,执行一些基本的数学运算来检查触摸是否在圆形区域内,当方法消耗触摸事件时返回true

当您不希望使用触摸事件时,请不要忘记允许其他触摸侦听器通过返回false进行传播。

+0

thx,如果它是一个简单的圆圈,我根本没有问题,但我需要像图像上的红色圆圈一样的形状 – Gorets

+0

我相信我误解了这个问题。 –

1

看到https://code.google.com/p/radial-menu-widget/How To Create a Rotating Wheel Control?或自己

保护无效的onDraw(帆布油画){// TODO自动生成方法存根

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