Скорее всего, проблема заключается в том, что вы не принимаете во внимание тот факт, что позиция MotionEvent
настроена так, чтобы она относилась к содержащему виду (в данном случае ImageView
), и похоже, что вы пытаясь нарисовать их на другом Canvas
, который имел бы другое координатное пространство. Если вам нужно, чтобы эти два элемента были разделены следующим образом, я бы рекомендовал использовать MotionEvent.getRawX()
и MotionEvent.getRawY()
, чтобы значения касания находились в координатах экрана в целом.
Однако, если вы просто хотите нарисовать круги над изображением, лучшим решением будет подкласс ImageView
, чтобы вы могли обнаруживать касания в его методе onTouchEvent()
напрямую (вместо слушателя) и выполнять пользовательское рисование в метод onDraw()
, гарантирующий, что все находится в одной и той же скорректированной координатной плоскости.
Из вашего кода не очевидно, почему эта операция будет работать правильно только три раза. Возможно, попробуйте вернуть только true
из метода обнаружения касания в интересующем вас экземпляре DOWN. Возможно, вы излишне крадете события касания в текущей реализации.
НТН