Bisakah saya mendapatkan posisi tampilan x dan y relatif terhadap tata letak root dari Aktivitas saya di Android?
android
android-layout
coordinates
fhucho
sumber
sumber
API Android sudah menyediakan metode untuk mencapainya. Coba ini:
Ini dok
sumber
parentViewGroup
dapat berupa orang tua mana pun dalam hierarki tampilan, sehingga berfungsi dengan baik untuk ScrollView juga.Silakan gunakan
view.getLocationOnScreen(int[] location);
(lihat Javadocs ). Jawabannya ada dalam array integer (x =location[0]
dan y =location[1]
).sumber
Pertama saya mendapatkan tata letak root lalu menghitung selisih koordinat dengan tampilan.
Anda juga dapat menggunakan
getLocationOnScreen()
bukangetLocationInWindow()
.sumber
Tidak perlu menghitungnya secara manual.
Cukup gunakan getGlobalVisibleRect seperti:
Perhatikan juga bahwa untuk koordinat pusat, bukan sesuatu seperti:
Anda bisa melakukannya:
sumber
getGlobalVisibleRect
dilakukanglobalOffset.set(-mScrollX, -mScrollY);
sehingga Anda hanya bisa mendapatkan nilai-nilai itu dengangetScollX/Y
jika Anda hanya membutuhkan koodinat relatif.Anda bisa menggunakan `
; `untuk mendapatkan lokasi tampilan Anda dengan benar.
Tetapi ada tangkapan jika Anda menggunakannya sebelum tata letak telah meningkat Anda akan mendapatkan posisi yang salah.
Solusi untuk masalah ini adalah menambahkan
ViewTreeObserver
seperti ini: -Deklarasikan secara global array untuk menyimpan posisi tampilan Anda
dan kemudian menambahkan
ViewTreeObserver
pada tata letak induk Anda untuk mendapatkan panggilan balik untuk tata letak inflasi dan hanya kemudian mengambil posisi pandang jika tidak, Anda akan mendapatkan koordinat xy yang salahdan kemudian gunakan seperti ini
sumber
Saya menulis sendiri dua metode utilitas yang tampaknya berfungsi di sebagian besar kondisi, menangani gulir, terjemahan, dan penskalaan, tetapi tidak rotasi. Saya melakukan ini setelah mencoba menggunakan offsetDescendantRectToMyCoords () dalam framework, yang memiliki akurasi tidak konsisten. Ini berhasil dalam beberapa kasus tetapi memberikan hasil yang salah pada yang lain.
"point" adalah array float dengan dua elemen (koordinat x & y), "leluhur" adalah viewgroup di suatu tempat di atas "keturunan" dalam hierarki pohon.
Pertama metode yang beralih dari koordinat turunan ke leluhur:
Berikutnya kebalikannya, dari leluhur ke keturunan:
sumber
Memetikan seseorang masih berusaha mencari tahu ini. Ini adalah bagaimana Anda mendapatkan pusat X dan Y dari
view
.sumber
Saya baru saja menemukan jawabannya di sini
Bunyinya: Dimungkinkan untuk mengambil lokasi tampilan dengan memanggil metode getLeft () dan getTop (). Yang pertama mengembalikan koordinat kiri, atau X, dari persegi panjang yang mewakili tampilan. Yang terakhir mengembalikan bagian atas, atau Y, mengoordinasikan persegi panjang yang mewakili tampilan. Metode ini keduanya mengembalikan lokasi tampilan relatif ke induknya. Misalnya, ketika getLeft () mengembalikan 20, itu berarti tampilan terletak 20 piksel di sebelah kanan tepi kiri induk langsungnya.
jadi gunakan:
sumber