Consulta sobre las coordenadas táctiles en un ImageView en Android
-
25-10-2019 - |
Pregunta
Tengo una imagen en ImageView. Necesito saber la coordenada exacta (x, y) de la imagen cuando toco la imagen. También quiero dibujar un círculo en el lugar táctil.
A continuación, es el código que uso. Tengo una vista de imagen y le adjunto un OnTouchListener.
El problema es este:
- Me pongo valores extraños (x, y)
Los nuevos círculos solo se dibujan 3 veces. ¡Después de eso, no se dibujan nuevos círculos!
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; } });
Solución
Es probable que el problema no tenga en cuenta el hecho de que la posición del MotionEvent
se ajusta para ser relativo a la vista de contenido (el ImageView
en este caso) y parece que estás intentando dibujarlos en otro Canvas
que tendría un espacio de coordenadas diferente. Si necesita que los dos estén separados así, recomendaría usar MotionEvent.getRawX()
y MotionEvent.getRawY()
para que los valores táctiles estén en las coordenadas de la pantalla en su conjunto.
Sin embargo, si solo desea dibujar los círculos sobre la imagen, una mejor solución sería subclase ImageView
para que puedas detectar toques en su onTouchEvent()
método directamente (en lugar de un oyente) y hacer dibujo personalizado en su onDraw()
Método, garantizar que todo esté en el mismo plano de coordenadas ajustado.
No es evidente a partir de su código por qué esta operación solo funcionaría correctamente tres veces. Quizás intente volver solo true
Desde el método de detección táctil en el caso descendente en el que le interesa. Puede estar robando innecesariamente eventos táctiles con la implementación actual.
Hth