@Override public boolean onTouchEvent(MotionEvent event) { Point point = new Point(); point.x = (int) event.getX(); point.y = (int) event.getY(); int count = 0; for (PieSlice slice : slices) { Region r = new Region(); r.setPath(slice.getPath(), slice.getRegion()); if (r.contains(point.x, point.y) && event.getAction() == MotionEvent.ACTION_DOWN) { indexSelected = count; } else if (event.getAction() == MotionEvent.ACTION_UP) { if (r.contains(point.x, point.y) && listener != null) { if (indexSelected > -1) { listener.onClick(indexSelected); } indexSelected = -1; } } count++; } if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_UP) { postInvalidate(); } return true; }