2013-05-27 5 views
1

Я рисую круг, используя 7 объектов для рисования, как показано ниже, на холсте в приложении для Android. один и тот же объект краски можно использовать более одного раза, чтобы нарисовать этот круг.Получить событие касания объекта Paint в android

Теперь я хочу отобразить имя цвета затронутого объекта краски, когда пользователь прикасается к каждому цвету.

Как я могу это сделать?

Circle using paint objects

ответ

0

Использование Сенсорного События для того же типа:

public class TouchImage extends ImageView { 
    Paint paint = new Paint(); 
    Point point = new Point(); 

    public TouchImage(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     paint.setColor(Color.BLUE); 
    } 

    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawCircle(point.x, point.y, 10, paint); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      point.x = event.getX(); 
      point.y = event.getY(); 
      invalidate(); 
     } 
     return true; 
    } 

    class Point { 
     float x, y; 
    } 
} 
+0

Я не использую 'canvas.drawCircle()' для рисования круга. Я использую 'canvas.drawArc()' для этого. с комбинацией из 24 дуг, нарисуйте один круг. – Bishan

+0

Хорошо, спасибо @Bishan –

0

Вы должны иметь позиции для всех цветных кругов. Внутри 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; 
} 
Смежные вопросы