Non c'è nulla di simile. Il percorso è solo una struttura dati, il modo in cui lo usi (disegno, clip, ...) non ha nulla a che fare con esso. E così sono gli eventi tattili.
Hai solo bisogno di fare un po 'di matematica con le coordinate toccanti. È una trasformazione 2D usando una matrice. Puoi leggere questo on wikipedia.
Per prima cosa è necessario associare il punto di tocco alle coordinate ingrandite/panoramiche, dare un'occhiata a here, here e here.
Non ho provato, ma se avete un ImageView questo metodo dovrebbe fare:
final float[] getPointerCoords(ImageView view, MotionEvent e)
{
final int index = e.getActionIndex();
final float[] coords = new float[] { e.getX(index), e.getY(index) };
Matrix matrix = new Matrix();
// invert compute the inverse transformation matrix
view.getImageMatrix().invert(matrix);
// this adjust the panning
matrix.postTranslate(view.getScrollX(), view.getScrollY());
// this apply the inverse transformation to your touch points
// which should give you the coordinates on your imageview
matrix.mapPoints(coords);
return coords;
}
Non posso dire se questo funzionerà out of the box per voi, perché io non so cosa uso del Sentiero che hai, posso solo supporre che tu lo usi per disegnare sopra la tua immagine. Se si applica qualsiasi altra trasformazione prima di tracciare il percorso, è necessario utilizzare la trasformazione applicata al percorso.
Se fate quelli trasformazione sulla tela è possibile estrarre la matrice in questo modo:
Matrix matrix = canvas.getMatrix()
Un altro percorso è quello di estrarre i valori di matrice in un array e fare il calcolo da soli:
// Get the values of the matrix
// create this array in a field an reuse it for performances
float[] values = new float[9];
matrix.getValues(values);
values[2]
e values[5]
sono le coordinate x,y
dell'angolo in alto a sinistra dell'elemento trasformato, indipendentemente dal fattore di zoom
values[0]
e values[4]
sono i fattori di zoom rispettivamente per la larghezza e l'altezza dell'elemento trasformato. Se si esegue lo zoom con lo stesso fattore, entrambi dovrebbero avere lo stesso valore.
Quando finalmente convertito il vostro punto di contatto nel Path
sistema è possibile controllare se è dentro il percorso utilizzando this metodo qualcun altro già suggerito nei commenti della sua domanda di coordinate.
if (path.contains(coordX, coordY)) {
// inside
} else {
// outside
}
Tu sei l'unico a conoscere il codice di cui si sta lavorando e quindi come coordinare il percorso di sistema si trasforma nella vista e quindi l'unico che può sapere come convertire correttamente indietro. Quindi non pensare a questa risposta come codice drop-in. Ti ho solo indicato nella direzione. Potrebbe essere utile stampare un log della coordinata/conversione touch per eseguire il debug durante lo sviluppo.
Buona fortuna.
Si prega di consultare: http://stackoverflow.com/questions/9588003/android-how-to-check-if-a-path-taintain-touched-point –
@DucNguyen Che non mi serve :( –
Sembrerebbe che il collegamento di Duc costituisca la base della soluzione – CommonsWare