2013-10-21 11 views
12

Desidero ottenere la posizione del mio ImageView a livello di programmazione. Per posizione, intendo la distanza in pixel dalla parte superiore dello schermo a quella ImageView. Ho provato ogni altra soluzione pubblicata nello stackoverflow ma non funziona per me. Mio livello minimo API è 8.Ottieni la posizione di ImageView rispetto allo schermo a livello di programmazione

Questi sono i codici Ho tried-

ImageView image = (ImageView) findViewById(R.id.imageView1); 
1) image.getTop(); 

2) private int getRelativeTop(View myView) { 
    if (myView.getParent() == myView.getRootView()) 
     return myView.getTop(); 
    else 
     return myView.getTop() + getRelativeTop((View) myView.getParent()); 
} 

3) image.getLocationOnScreen(int[] locaiton); 
+1

Potresti aggiungere qualche codice di ciò che hai provato? – Carnal

+0

@Carnal Ho aggiunto i codici. – Naddy

+0

Ottimo, stai usando questi metodi su Crea? – Carnal

risposta

40

È necessario attendere la richiamata quando il layout è stato posizionato con viste minori. Questo è l'ascoltatore che devi aggiungere alla tua vista root per calcolare le coordinate della tua immagine. Altrimenti restituirà 0.

getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    public void onGlobalLayout() { 
     getViewTreeObserver().removeGlobalOnLayoutListener(this); 

     int[] locations = new int[2]; 
     image.getLocationOnScreen(locations); 
     int x = locations[0]; 
     int y = locations[1]; 
    } 
}); 
+1

risposta impressionante !! – Naddy

+0

Grazie mille per la risposta, hai risparmiato le mie ore .. !! –

+0

incredibile, le sue opere perfette! –

6

Uso View.getLocationOnScreen() o getLocationInWindow()MA SOLO dopo la visione è stata layout. getTop(), getLeft(), getBottom() e getRight() restituiscono la posizione relativa al relativo genitore.

+1

Ho usato questi. Tornano tutti 0. Non so perché. – Naddy

+0

non dovresti chiamare questi metodi su onCreate(), prova suWindowFocusChanged() –

Problemi correlati