Запрос относительно координат прикосновения на изображении в Android
-
25-10-2019 - |
Вопрос
У меня есть изображение в ImageView. Мне нужно знать точную (x, y) координату изображения, когда я касаюсь изображения. Я также хочу нарисовать круг на месте касания.
Ниже приведен код, который я использую. У меня есть изображение, и я прикрепляю к нему ontouchlistener.
Проблема в следующем:
- Я получаю странные (x, y) значения
Новые круги нарисованы только 3 раза. После этого не нарисовано новые круги!
ImageView touch=(ImageView) findViewById(R.id.image); touch.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN){ //Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); //Canvas can=new Canvas(bm); p.setColor(Color.RED); float fx=event.getX(); float fy=event.getY(); can.drawCircle(fx, fy, 20, p); } return true; } });
Решение
Проблема, скорее всего, вы не учитываете тот факт, что позиция MotionEvent
корректируется, чтобы быть относительно содержащегося представления ( ImageView
в этом случае) и похоже, что вы пытаетесь нарисовать их на другом Canvas
который будет иметь другое координатное пространство. Если вам нужно, чтобы они были отдельными, я бы порекомендовал использовать MotionEvent.getRawX()
а также MotionEvent.getRawY()
так что значения сенсорных значений находятся в координатах экрана в целом.
Однако, если вы просто хотите нарисовать круги над изображением, лучшим решением будет подкласс ImageView
Таким образом, вы можете обнаружить прикосновения в его onTouchEvent()
метод напрямую (вместо слушателя) и выполняйте пользовательский рисунок в своем onDraw()
Метод, гарантируя, что все находится в той же скорректированной плоскости координат.
Из вашего кода не очевидно, почему эта операция будет работать правильно только три раза. Возможно, попробуйте только вернуться true
Из метода обнаружения прикосновения в случае, в котором вы заинтересованы. Вы можете быть излишне красть события прикосновения с текущей реализацией.
Hth