使用事件点击创建自定义控件点击

使用事件点击创建自定义控件点击

问题描述:

我在图像中创建了如下所示的自定义控件。它是一个半圆的地方1,2等。 image1使用事件点击创建自定义控件点击

当用户点击一个地方(1,2等)时,它会改变颜色(例如用户点击地点3,图像2)。

image2

我尝试使用canvas和方法借鉴。但我不认为这是正确的。你能帮助我一个更好的解决方案,以及如何设置一个用户点击该地点的事件?

+0

我也认为我可以使用形状在drawable中,你觉得怎么样?可能吗? – Tim 2012-03-23 08:10:23

您可以用canvas做到这一点,波纹管是改变颜色(红色)上的触摸事件View 2椭圆形的小例子:

class ExtraView extends View { 

     private boolean flag1, flag2; 
     private Paint p1, p2; 
     private RectF oval1, oval2; 

     public ExtraView(Context context) { 
      super(context); 
      flag1 = false; 
      flag2 = false; 
      // bigger oval paint 
      oval1 = new RectF(50, 50, 460, 360); 
      p1 = new Paint(); 
      p1.setStrokeWidth(2.0f); 
      // smaller oval paint 
      oval2 = new RectF(140, 140, 360, 260); 
      p2 = new Paint(); 
      p2.setStrokeWidth(2.0f); 
     } 

     @Override 
     public void draw(Canvas canvas) { 
      canvas.drawColor(Color.GREEN); 
      // bigger oval 
      if (flag1) { 
       p1.setColor(Color.RED); 
      } else { 
       p1.setColor(Color.WHITE); 
      } 
      p1.setStyle(Paint.Style.FILL); 
      canvas.drawOval(oval1, p1); 
      p1.setColor(Color.BLACK); 
      p1.setStyle(Paint.Style.STROKE); 
      canvas.drawOval(oval1, p1); 
      // smaller oval 
      if (flag2) { 
       p2.setColor(Color.RED); 
      } else { 
       p2.setColor(Color.WHITE); 
      } 
      p2.setStyle(Paint.Style.FILL); 
      canvas.drawOval(oval2, p2); 
      p2.setColor(Color.BLACK); 
      p2.setStyle(Paint.Style.STROKE); 
      canvas.drawOval(oval2, p2); 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       if (oval2.contains(event.getX(), event.getY())) { 
        flag2 = !flag2; 
        invalidate(); 
       } else if (oval1.contains(event.getX(), event.getY())) { 
        flag1 = !flag1; 
        invalidate(); 
       } 
      } 
      return true; 
     } 
    }