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:

  1. Me pongo valores extraños (x, y)
  2. 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;
        }
    });
    
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top