Autore Topic: Problemi con le coordinate di un evento touch screen  (Letto 484 volte)

Offline Andrew

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 11.04, Windows Xp
Problemi con le coordinate di un evento touch screen
« il: 16 Settembre 2011, 01:00:39 CEST »
0
Ciao a tutti.
Parlando di eventi touch screen sappiamo che il metodo onTouchEvent(MotionEvent event) permette di catturare eventi di tocco sullo schermo e che event.getX() ed
event.getY() mi danno le coordinate del tocco come valori float (quindi valori con la virgola). Nello specifico mi sono accorto usando il Logcat che tenendo fisso il dito in un punto del display del cellulare e non muovendolo, l'evento percepito non è solo MotionEvent.ACTION_DOWN bensì MotionEvent.ACTION_MOVE e le coordinate restituite sono molteplici. Questo posso capirlo in quanto la superficie del dito tocca più punti e il dispositivo leggendo più coordinate crede che il dito si muova pur tenendolo fermo. Il mio problema è che vorrei leggere il colore di un solo pixel di un'immagine a colori quando tengo fermo il dito. In particolare mi serve il punto centrale dell'area occupata dal dito.
Per prima cosa, supponendo di avere un oggetto Bitmap, devo arrotondare a valori interi le coordinate del tocco in quanto il metodo getPixel(intx, int y) di Bitmap vuole coordinate intere per restituire il colore del pixel. Poi come faccio a ottenere il punto centrale del tocco? Esiste per caso una funzione che può aiutarmi? Tenete conto che mentre sono fermo e leggo il valore di un pixel poi comincio a spostarmi sull'immagine anche se lentamente e ad ogni spostamento voglio registrare sempre il pixel centrale. Questo mi serve perchè ad ogni spostamento, se il colore dell'immagine nel pixel cambia, voglio far vibrare o meno il dispositivo. Se stessi fermo potrei pensare di memorizzare in un array dinamico le coordinate dei vari pixel e cercare il baricentro, ma muovendomi non so proprio come fare. Penso però, che anche la ricerca del baricentro, se non fatta in modo molto efficiente, può risultare lenta anche durante lo spostamento e quindi fornire risultati sbagliati. Se non è proprio il baricentro mi accontento di un altro punto appartenente all'intorno.
Spero che possiate aiutarmi magari con qualche riga di codice abbozzata.
Grazie in anticipo.