2011-09-01 17 views
9

verilen x/y coords ile görünümü bul belirli bir mutlak x/y piksel koordinatında görüntülenen Görünümü bulmak mümkün mü?android

Düzenleme: büyük işler uygun Çözüm bulundu:

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}; 
: cardReference (20 TextView'lar bir 4 x 5 Matrix düzenlenmiş benim durumumda) Kaynaklarına tamsayı dizisi olan

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; 
} 

Performansı hızlandırmak için bir dizi TextView kullanmayı düşünürüm, ardından her bir Loopta findViewById() öğesini çağırırdım.

cevap

4

Tek bir 'çözüm', ana görünümün çocuklarına geçiş yapmak ve seçtiğiniz X ve Y koordinatlarına göre getLeft() ve getTop() koordinatlarını kontrol etmek olacaktır. Eğer bir eşleşme varsa, görüşün var.

Yine de diğer alternatifleri duymak isterim.

Düzenleme: Ayrıca, koordinatlarınızın bu aralık içinde olup olmadığını görmek için verilen sol ve üst koordinatlara göre görünümün yüksekliğini/genişliğini de ölçmeniz gerekir.