Domanda

Ho un'immagine in ImageView. Ho bisogno di sapere l'esatto (x, y) coordinata dell'immagine quando tocco l'immagine. Voglio anche per disegnare un cerchio sul posto tocco.

Dato che segue, è l'uso di codice ho. Ho un ImageView e allego un onTouchListener ad esso.

Il problema è questo:

  1. ottengo valori (x, y) strani
  2. nuovi cerchi sono disegnati solo 3 volte. Dopo di che non nuovi cerchi sono disegnati!

    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;
        }
    });
    
È stato utile?

Soluzione

Il problema è più probabile che non si è tenuto conto del fatto che la posizione del MotionEvent è regolato per essere relativa alla vista che contiene (il ImageView in questo caso) e sembra che si sta tentando di disegnarli su un'altra Canvas che avrebbe una coordinata diverso spazio. Se avete bisogno di due di essere separati come questo, mi consiglia di utilizzare MotionEvent.getRawX() e MotionEvent.getRawY() modo che i valori tattili sono le coordinate dello schermo nel suo complesso.

Tuttavia, se si desidera solo per disegnare i cerchi sopra l'immagine, una soluzione migliore potrebbe essere quella di sottoclasse ImageView in modo da poter rilevare tocchi nel suo metodo onTouchEvent() direttamente (invece di un ascoltatore) e non su misura di disegno nel suo metodo onDraw(), garantendo tutto è nella stessa regolata piano delle coordinate.

Non è evidente dal codice perché questa operazione potrebbe funzionare correttamente solo tre volte. Forse tenta solo di ritorno true dal metodo di rilevazione tocco nel caso GIÙ che ti interessa. Si può essere inutilmente rubando eventi contatto con l'implementazione corrente.

HTH

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top