Saya mencoba untuk mendapatkan koordinat piksel layar absolut dari sudut kiri atas tampilan. Namun, semua metode yang saya dapat temukan seperti getLeft()
dan getRight()
tidak berfungsi karena semuanya tampaknya relatif terhadap pandangan orang tua, sehingga memberi saya 0
. Apa cara yang tepat untuk melakukan ini?
Jika ini membantu, ini adalah untuk permainan 'kembalikan gambar ke urutan'. Saya ingin pengguna dapat menggambar kotak untuk memilih beberapa bagian. Asumsi saya adalah bahwa cara termudah untuk melakukan itu adalah ke getRawX()
dan getRawY()
dari MotionEvent
dan kemudian membandingkan nilai-nilai itu terhadap sudut kiri atas tata letak memegang potongan-potongan. Mengetahui ukuran potongan, saya kemudian dapat menentukan berapa banyak potongan yang telah dipilih. Saya menyadari bahwa saya dapat menggunakan getX()
dan getY()
pada MotionEvent
, tetapi karena itu mengembalikan posisi relatif yang membuat menentukan potongan mana yang dipilih lebih sulit. (Bukan tidak mungkin, saya tahu, tetapi tampaknya tidak perlu rumit).
Sunting: Ini adalah kode yang saya gunakan untuk mencoba mendapatkan ukuran wadah penampung, sesuai salah satu pertanyaan. TableLayout
adalah meja yang menampung semua potongan puzzle.
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
Log.d(LOG_TAG, "Values " + tableLayout.getTop() + tableLayout.getLeft());
Sunting 2: Ini kode yang sudah saya coba, mengikuti lebih banyak jawaban yang disarankan.
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]);
Kode ini ditambahkan setelah semua inisialisasi dilakukan. Gambar telah dibagi menjadi array dari ImageViews (array sel []) yang terkandung dalam a TableLayout
. Sel [0] adalah kiri atas ImageView
, dan saya mengambil sel [4] karena berada di suatu tempat di tengah dan pasti tidak memiliki koordinat (0,0).
Kode yang ditunjukkan di atas masih memberi saya semua 0s dalam log, yang saya benar-benar tidak mengerti karena berbagai potongan puzzle ditampilkan dengan benar. (Saya mencoba int publik untuk tableLayoutCorners dan visibilitas default, keduanya memberikan hasil yang sama.)
Saya tidak tahu apakah ini signifikan, tetapi ImageView
s awalnya tidak diberi ukuran. Ukuran ImageView
s ditentukan selama inisialisasi secara otomatis oleh Tampilan ketika saya memberikan gambar untuk ditampilkan. Bisakah ini berkontribusi pada nilainya menjadi 0, meskipun kode pencatatan setelah mereka diberikan gambar dan secara otomatis mengubah ukurannya sendiri? Untuk mencegahnya, saya menambahkan kode tableLayout.requestLayout()
seperti yang ditunjukkan di atas, tetapi itu tidak membantu.