Вы должны иметь позиции для всех цветных кругов. Внутри onTouchEvent() вы можете сравнить расстояние между каждым цветовым кружком и положением касания с радиусом цветовых кругов.
Если расстояние меньше радиуса (и может быть больше, чем минимальное значение, поэтому только цвета могут быть осязаемы, а не пустая область внутри круга), вы можете отнять угол и определить выбранный цвет таким образом.
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
for (colorCircle c : allCircles) {
float distance = sqrt ((event.getX() - c.getX())^2 +
((event.getY() - c.getY())^2);
if (distance < c.getRadius()) {
for (coloredPart cPart : c) {
if (event.getX() > (Math.cos(cPart.getMinAngle) * c.getRadius)
+ c.getX() &&
event.getX() < (Math.cos(cPart.getMaxAngle) * c.getRadius)
+ c.getX() &&
event.getY() > (Math.sin(cPart.getMinAngle) * c.getRadius)
+ c.getY() &&
event.getY() < (Math.sin(cPart.getMaxAngle) * c.getRadius)
+ c.getY() &&) {
// cPart was touched
}
}
}
}
}
return true;
}
Я не использую 'canvas.drawCircle()' для рисования круга. Я использую 'canvas.drawArc()' для этого. с комбинацией из 24 дуг, нарисуйте один круг. – Bishan
Хорошо, спасибо @Bishan –