ฉันกำลังพยายามหาพิกัดพิกเซลของหน้าจอสัมบูรณ์ที่มุมซ้ายบนของมุมมอง อย่างไรก็ตามวิธีการทั้งหมดที่ฉันสามารถค้นหาเช่นgetLeft()
และจะไม่ได้ทำงานตามที่พวกเขาทั้งหมดดูเหมือนจะเป็นญาติไปยังผู้ปกครองของมุมมองจึงให้ฉันgetRight()
0
วิธีที่เหมาะสมในการทำเช่นนี้คืออะไร?
ถ้าช่วยได้นี่เป็นเกม 'นำภาพกลับมาเรียงตามลำดับ' ฉันต้องการให้ผู้ใช้สามารถวาดกล่องเพื่อเลือกหลาย ๆ ชิ้นได้ ข้อสันนิษฐานของฉันคือวิธีที่ง่ายที่สุดในการทำเช่นนั้นคือไปgetRawX()
และgetRawY()
กลับจากMotionEvent
และเปรียบเทียบค่าเหล่านั้นกับมุมซ้ายบนของโครงร่างที่ถือส่วนต่างๆ เมื่อรู้ขนาดของชิ้นส่วนแล้วฉันสามารถกำหนดจำนวนชิ้นที่เลือกได้ ฉันรู้ว่าฉันสามารถใช้getX()
และgetY()
บนได้MotionEvent
แต่เนื่องจากนั่นส่งคืนตำแหน่งสัมพัทธ์ที่ทำให้การเลือกชิ้นส่วนใดยาก (เป็นไปไม่ได้ฉันรู้ แต่ดูเหมือนว่าจะซับซ้อนโดยไม่จำเป็น)
แก้ไข: นี่คือรหัสที่ฉันใช้เพื่อพยายามรับขนาดของคอนเทนเนอร์ที่ถือครองตามคำถามข้อใดข้อหนึ่ง TableLayout
เป็นตารางที่เก็บชิ้นส่วนปริศนาทั้งหมด
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
Log.d(LOG_TAG, "Values " + tableLayout.getTop() + tableLayout.getLeft());
แก้ไข 2: นี่คือรหัสที่ฉันได้ลองทำตามคำตอบที่แนะนำเพิ่มเติม
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]);
รหัสนี้ถูกเพิ่มเข้ามาหลังจากการเริ่มต้นทั้งหมดเสร็จสิ้นแล้ว ภาพที่ได้รับการแบ่งออกเป็นอาร์เรย์ของ ImageViews A (เซลล์ [] อาร์เรย์) TableLayout
อยู่ภายใน เซลล์ [0] อยู่ด้านบนซ้ายImageView
และฉันเลือกเซลล์ [4] เนื่องจากอยู่ตรงกลางและแน่นอนที่สุดไม่ควรมีพิกัด (0,0)
รหัสที่แสดงด้านบนยังคงให้ 0s ทั้งหมดในบันทึกซึ่งฉันไม่เข้าใจจริงๆเพราะชิ้นส่วนปริศนาต่าง ๆ แสดงอย่างถูกต้อง (ฉันพยายาม public int สำหรับ tableLayoutCorners และการมองเห็นเริ่มต้นทั้งสองให้ผลลัพธ์เหมือนกัน)
ฉันไม่รู้ว่านี่เป็นสิ่งสำคัญหรือไม่ แต่ImageView
เดิมนั้นไม่ได้มีขนาด ขนาดของImageView
s จะถูกกำหนดในระหว่างการเริ่มต้นโดยอัตโนมัติโดย View เมื่อฉันให้ภาพที่จะแสดง สิ่งนี้อาจช่วยให้ค่าของพวกเขาเป็น 0 ถึงแม้ว่ารหัสการบันทึกนั้นจะเกิดขึ้นหลังจากที่พวกเขาได้รับภาพและมีการปรับขนาดตัวเองโดยอัตโนมัติ? ในการโต้กลับนั้นฉันเพิ่มรหัสtableLayout.requestLayout()
ตามที่แสดงด้านบน แต่นั่นไม่ได้ช่วย