2011-09-01 12 views
9

¿es posible encontrar la Vista que se muestra en una coordinada absoluta x/y de píxeles?Buscar vista con coordenada x/y dada en android

Editar: He encontrado una solución adecuada que funciona muy bien:

private View findViewByCoord(float x, float y){ 
    TextView textView = null; 
    int[] location = new int[2]; 
    int width = 0; 
    int height = 0; 
    for(int reference : cardReference){ 
     textView = (TextView) findViewById(reference); 
     textView.getLocationOnScreen(location); 
     width = textView.getWidth(); 
     height = textView.getHeight(); 
     if(location[0] <= x && x <= (location[0] + width) && location[1] <= y && y <= (location[1] + height)){ 
      Log.i("Test", "Card " + textView.getText() + " is pointed"); 
      return textView; 
     } 
    } 
    return null; 
} 

Dónde cardReference es una matriz de número entero a los recursos (en mi caso 20 TextViews dispuestos en un x 5 Matrix 4):

int[] cardReference = new int[]{R.id.card1_1, R.id.card1_2, R.id.card1_3, R.id.card1_4, 
           R.id.card2_1, R.id.card2_2, R.id.card2_3, R.id.card2_4, 
           R.id.card3_1, R.id.card3_2, R.id.card3_3, R.id.card3_4, 
           R.id.card4_1, R.id.card4_2, R.id.card4_3, R.id.card4_4, 
           R.id.card5_1, R.id.card5_2, R.id.card5_3, R.id.card5_4}; 

Para acelerar el rendimiento, consideraría utilizar una matriz de TextViews y luego llamar a findViewById() en cada Loop.

Respuesta

4

Una 'solución' sería pasar por los hijos de la vista principal y verificar las coordenadas getLeft() y getTop() con las coordenadas X e Y de su elección. Si hay una coincidencia, usted tiene su punto de vista.

Me gustaría escuchar otras alternativas.

Editar: También deberá calcular el alto/ancho de la vista en relación con las coordenadas izquierda y superior dadas para ver si sus coordenadas están dentro de ese rango.

Cuestiones relacionadas