2014-06-04 29 views
6

başka bir görünüm kapladığını bilmek nasıl İçeride iki görünümleri ile bir RelativeLayout var. Görünüm1, düzen içinde her on saniyede bir rastgele bir konumda yeniden oluşturulur. view2 statik bir konumda ve daha büyük bir görünümdür1. İlk görüşün ikinci görüş alanı içinde yaratıldığını bilmek istiyorum, bunu nasıl yapabilirim?Android - Bir görünüm RelativeLayout

Şu anda bu kodu deniyorum ama id iyi çalışmıyor.

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

Yalnızca view1 view2'nin bir tarafına dokunduğunda true değerini döndürür. Ben sadece view1 tamamen view2 içinde ise true döndürmesini istiyorum.

+0

Her görünümün koordinatlarını ve boyutlarını alabilir ve çakışma olup olmadığını belirlemek için matematiği gerçekleştirebilirsiniz. – zgc7009

+0

Şu anda bunu yapmaya çalışıyorum ama başarı olmadan. Soruya bir kod ekledim – TheModularMind

cevap

12

getLeft(), getRight(), getTop() ve 'u kullanmalısınız.

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

ebeveyn yani hemen değil addView() sonra çıkarıldığı zaman bu değerler mevcut olacağını dikkatli olun.

Daha esnek olabilecek başka bir olası çözüm, her bir görünümün koordinatlarına sahip Rect örneğini oluşturmaktır, örn.

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

Sonra rect1.contains(rect2) veya Rect.intersects(rect1, rect2) veya başka herhangi bir kombinasyonunu kullanabilirsiniz.

+0

Yukarıdaki ifade yalnızca v1 v2 içinde, eğer örtüşüyorsa değil, ama fikir ise doğrudur. – zgc7009

+0

@ zgc7009 Soru, "Görünümün view1 içinde _totally_ olması durumunda, true döndürmesini istiyorum." – matiash

+0

Sanırım son satırını düzenlemeye ekledi, bu durumda bu iyi çalışıyor. – zgc7009

İlgili konular