Bir görünümün sol üst köşesinin mutlak ekran piksel koordinatlarını almaya çalışıyorum. Ancak, bulabildiğim getLeft()
ve bulamadığım tüm yöntemler, hepsi getRight()
görünümün ebeveynine göreli göründüğünden bana verir 0
. Bunu yapmanın uygun yolu nedir?
Eğer yardımcı olursa, bu 'resmi tekrar sıraya koy' oyunu içindir. Kullanıcının birden fazla parça seçmek için bir kutu çizebilmesini istiyorum. Benim varsayım Bunu yapmanın en kolay yolu olmasıdır getRawX()
ve getRawY()
gelen MotionEvent
ve daha sonra parçaları tutan düzen sol üst köşesine karşı bu değerleri karşılaştırın. Parçaların boyutunu bilerek, kaç parçanın seçildiğini belirleyebilirim. I kullanabilir gerçekleştirmek getX()
ve getY()
ilgili MotionEvent
, ancak geri döner parçalar daha zor seçilen belirlenirken yapan bir göreli konum olarak. (İmkansız değil, biliyorum, ama gereksiz yere karmaşık görünüyor).
Düzenleme: Bu, soru konteyner birine göre tutma konteyner boyutunu almak için kullanılan kod. TableLayout
tüm yapboz parçalarını tutan masadır.
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
Log.d(LOG_TAG, "Values " + tableLayout.getTop() + tableLayout.getLeft());
Edit 2: Önerilen cevaplardan daha fazlasını izleyerek denediğim kod.
public int[] tableLayoutCorners = new int[2];
(...)
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
tableLayout.requestLayout();
Rect corners = new Rect();
tableLayout.getLocalVisibleRect(corners);
Log.d(LOG_TAG, "Top left " + corners.top + ", " + corners.left + ", " + corners.right
+ ", " + corners.bottom);
cells[4].getLocationOnScreen(tableLayoutCorners);
Log.d(LOG_TAG, "Values " + tableLayoutCorners[0] + ", " + tableLayoutCorners[1]);
Bu kod, tüm başlatma işlemleri tamamlandıktan sonra eklenmiştir. Görüntü, içinde bulunan bir ImageViews dizisine (hücreleri [] dizisi) bölünmüştür TableLayout
. Hücreler [0] sol ImageView
üsttedir ve hücreleri [4] ortada bir yerde olduğu için aldım ve (0,0) koordinatlarına kesinlikle sahip olmamalıydım.
Yukarıda gösterilen kod hala günlüklerdeki tüm 0'ları veriyor, ki gerçekten bilmiyorum çünkü çeşitli puzzle parçaları doğru bir şekilde gösteriliyor. (Her ikisi de aynı sonucu veren tableLayoutCorners ve varsayılan görünürlük için genel int denedim.)
Bunun önemli olup olmadığını bilmiyorum, ama ImageView
s aslında bir boyut verilmiyor. ImageView
Görüntülenecek bir görüntü verdiğimde , s boyutu yeniden başlatma sırasında Görünüm tarafından otomatik olarak belirlenir. Günlük kaydı kodu bir resim verildikten ve otomatik olarak yeniden boyutlandırıldıktan sonra olsa da, bu değerlerin 0 olmasına katkıda bulunabilir mi? Potansiyel olarak buna karşı koymak için, tableLayout.requestLayout()
yukarıda gösterildiği gibi kodu ekledim , ancak bu yardımcı olmadı.