2013-11-18 3 views
2

У меня есть несколько полигонов на холсте. Как я могу прослушивать клик на любом из полигонов?На полигонах Canvas для Android нажмите

У меня есть метод

public void drawPolygon(ChartPolygon polygon) { 

     List<Point> points = polygon.getPoints(); 
     int size = points.size(); 
     if (size < 2) { 
      return; 
     } 

     Paint polyPaint = new Paint(); 
     polyPaint.setColor(polygon.getColor()); 
     polyPaint.setStyle(Style.FILL); 

     Path polyPath = new Path(); 
     polyPath.moveTo(points.get(0).getX(), points.get(0).getY()); 
     for (Point point : points) { 
      polyPath.lineTo(point.getX(), point.getY()); 
     } 
     canvas.drawPath(polyPath, polyPaint); 
    } 

ответ

0

Read this post, этот пост может помочь вам

Первый из них, вы можете получить позицию в X и Y события мыши в вашем экране. Вы можете реализовать функцию onTouchEvent в Activity extends

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 

     if (topTouchArea.contains(event.getX(), event.getY())) {     
      currentTouch = TOUCH_TOP; 
     } else if (RightTouchArea.contains(event.getX(),event.getY())) {     
      currentTouch = TOUCH_RIGHT; 
     } else if (LeftTouchArea.contains(event.getX(),event.getY())) {    
      currentTouch = TOUCH_LEFT; 
     } else { 
      return false; //Return false if user touches none of the corners 
     } 
     return true; 
    } 
    } 

Теперь (всегда в вашем onTouchEvent) функции, вы можете оценить положение и областей вашего многоугольника.

case MotionEvent.ACTION_MOVE: 

     switch (currentTouch) { 
     case TOUCH_TOP:    
      top.x = event.getX(); 
      top.y = event.getY();        
      invalidate(); 
      return true; 
     case TOUCH_RIGHT:     
      Right.x = event.getX(); 
      Right.y = event.getY();     
      invalidate(); 
      return true; 
     case TOUCH_LEFT:     
      Left.x = event.getX(); 
      Left.y = event.getY();    
      invalidate(); 
      return true;  
     }   

    case MotionEvent.ACTION_UP: 

     switch (currentTouch) { 
     case TOUCH_TOP: 
      top.x = event.getX(); 
      top.y = event.getY();     
      invalidate(); 
      currentTouch = NONE; 
      return true; 
     case TOUCH_RIGHT: 
      Right.x = event.getX(); 
      Right.y = event.getY();    
      invalidate(); 
      currentTouch = NONE; 
      return true; 
     case TOUCH_LEFT: 
      Left.x = event.getX(); 
      Left.y = event.getY();    
      invalidate(); 
      currentTouch = NONE; 
      return true;  
     }   
     return false; 

Все пост в article link

2

Я хотел бы сохранить список регионов. Всякий раз, когда вы рисуете новый полигон, использовать один и тот же путь, который вы используете для рисования и определить новый Регион:

Region r = new Region(); 
r.setPath(path, clip); 
regionList.add(r); 

клип может быть определен, например, по

Region clip = new Region(0, 0, canvas.getWidth(), canvas.getHeight()); 

Наконец, когда вы обнаружили связь в цикле onTouchListener над regionList и проверить, является ли прикоснулся точка (при х и у) внутри области:

for (int i = 0; i < regionList.size(); i++) { 
    Region r = regionList.get(i); 
    if (r.contains(x,y) { 
     selectedRegionIndex = i; 
     break; 
    } 
}