2014-06-04 14 views
6

Ho un RelativeLayout con due viste al suo interno. La vista 1 viene ricreata all'interno del layout in una posizione casuale ogni dieci secondi. view2 si trova in una posizione statica ed è più grande di view1. Voglio sapere quando viene creata la prima vista all'interno della seconda area di visualizzazione, come posso farlo?Android - Come sapere se una vista si sovrappone a un'altra vista in RelativeLayout

Attualmente sto provando questo codice ma id non funziona bene.

 if (paramsView1.topMargin > View2Ystart 
      && paramsView1.topMargin < View2Yend 
      && paramsView1.leftMargin > View2Xstart 
      && paramsView1.leftMargin < View2Xend) { 
     return true 
    } 
    else 
     return false; 

Restituisce vero solo se view1 sta toccando un lato della vista2. Voglio che ritorni vero solo se view1 è totalmente dentro view2.

+0

È possibile ottenere le coordinate e le dimensioni di ciascuna vista e fare i calcoli matematici per determinare se c'è sovrapposizione. – zgc7009

+0

Attualmente sto cercando di farlo ma senza successo. Ho aggiunto del codice alla mia domanda – TheModularMind

risposta

12

Si dovrebbe usare getLeft(), getRight(), getTop() e getBottom().

if (v1.getTop() >= v2.getTop() && 
    v1.getLeft() >= v2.getLeft() && 
    v1.getRight() <= v2.getRight() && 
    v1.getBottom() <= v2.getBottom()) { ... 

essere consapevoli che questi valori saranno disponibili quando il genitore è disposto, cioè non immediatamente dopo addView().

Un'altra possibile soluzione, che può essere più flessibile, consiste nel creare istanze Rect con le coordinate di ciascuna vista, ad es.

Rect rect1 = new Rect(v1.getLeft(), v1.getTop(), v1.getRight(), v1.getBottom()); 
Rect rect2 = new Rect(v2.getLeft(), v2.getTop(), v2.getRight(), v2.getBottom()); 

Quindi è possibile utilizzare rect1.contains(rect2) o Rect.intersects(rect1, rect2) o qualsiasi altra combinazione.

+0

L'affermazione precedente è vera solo se v1 è all'interno di v2, non se si sovrappone, ma l'idea è lì. – zgc7009

+0

@ zgc7009 La domanda specifica "Voglio che restituisca true solo se view1 è _totally_ all'interno di view2." – matiash

+0

Penso che abbia aggiunto l'ultima riga nella modifica, in tal caso funziona bene. – zgc7009

Problemi correlati