Saya ingin melakukan kontrol sederhana: sebuah wadah dengan pemandangan di dalamnya. Jika saya menyentuh wadah dan saya menggerakkan jari, saya ingin memindahkan pandangan untuk mengikuti jari saya.
Wadah seperti apa (tata letak) yang harus saya gunakan? Bagaimana cara melakukannya?
Saya tidak perlu menggunakan permukaan, tetapi tata letak yang sederhana.
Jawaban:
Sesuatu seperti ini:
Dalam
main.xml
hanyaRelativeLayout
dengan@+id/root
sumber
layoutPrarms.rightMargin = -250
dan sama denganbottomMargin
!! Bisakah Anda menjelaskannya? Bagaimanapun, terima kasih banyak !!Saya telah menemukan pendekatan yang mudah untuk melakukannya dengan ViewPropertyAnimator:
sumber
setX
dansetY
secara langsung, alih-alih menerapkan animasi berdurasi 0.Mengikuti pendekatan @Andrey, jika Anda ingin memindahkan tampilan dari pusatnya, Anda hanya perlu mengurangi setengah tinggi dan lebar tampilan ke gerakan.
sumber
Implementasi yang sama di Kotlin
sumber
Sentuh wadah dan tampilan akan mengikuti jari Anda.
kode xml
Kode Java
sumber
Saya sarankan untuk menggunakan view.translationX dan view.translationY untuk memindahkan pandangan Anda.
Cuplikan Kotlin:
sumber
Buat kelas pendengar sentuh khusus (di Kotlin):
(Kode ini membatasi tampilan Anda dari menyeret keluar dari tampilan induknya)
Bagaimana cara menggunakannya?
parentView
adalah induk dari pandangan Anda.sumber
Dalam kode di bawah ini, saya telah membuat sesuatu yang disebut
RegionView
( git ), yang merupakan wadah yang dapat digunakan kembali yang bertanggung jawab untuk mengelola operasi seret dan perbesar untuk setiap anak yang bersarang.Di sini, kita memanipulasi
top
danleft
koefisien anakView
'sLayoutParams
gerakan simulasi tentang diagram. Dengan memisahkan interpretasi penanganan apa yang dipahami sebagai operasi seret, dan apa yang ditentukan sebagai operasi skala, kami dapat memberikan manipulasi yang dapat diandalkan anakView
.Di sini saya menunjukkan contoh use case:
sumber
Mengubah sedikit solusi yang disediakan oleh @Vyacheslav Shylkin untuk menghapus ketergantungan nomor yang dimasukkan secara manual.
sumber
Dalam contoh ini Anda dapat memindahkan tampilan di dalam batas induknya terlepas dari ukurannya, animasi tanpa cacat, dan menangkap klik.
Alasan bahwa solusi ini lebih unggul daripada komentar lain adalah bahwa pendekatan ini menggunakan Directional Pad yang menghitung sendiri dan tidak akan menyampaikan pada posisi Lihat yang merupakan sumber untuk banyak bug.
Jika Anda memiliki wadah di dalam ScrollView atau ScrollView dua dimensi, Anda harus menambahkan baris ini ke onTouch
sumber
Sama seperti jawaban @ Alex Karshin , saya sedikit berubah.
sumber