Apakah ada cara umum untuk menampilkan gambar besar dan memungkinkan pengguna untuk memperbesar dan memperkecil dan menggeser gambar?
Sampai sekarang saya menemukan dua cara:
- menimpa ImageView, yang tampaknya sedikit terlalu banyak untuk masalah yang sama.
- menggunakan tampilan web tetapi dengan sedikit kontrol atas tata letak keseluruhan dll.
Jawaban:
MEMPERBARUI
Saya baru saja memberi TouchImageView pembaruan baru. Sekarang termasuk Zoom Ketuk Ganda dan Fling selain Panning dan Pinch Zoom. Kode di bawah ini sangat tanggal. Anda dapat memeriksa proyek github untuk mendapatkan kode terbaru.
PEMAKAIAN
Tempatkan TouchImageView.java di proyek Anda. Kemudian dapat digunakan sama dengan ImageView. Contoh:
Jika Anda menggunakan TouchImageView dalam xml, maka Anda harus memberikan nama paket lengkap, karena itu adalah tampilan khusus. Contoh:
Catatan: Saya telah menghapus jawaban saya sebelumnya, yang mencakup beberapa kode yang sangat lama dan sekarang terhubung langsung ke kode terbaru di github.
ViewPager
Jika Anda tertarik untuk memasukkan TouchImageView dalam ViewPager, lihat jawaban ini.
sumber
TouchImageView(Context context, AttributeSet attrs)
dan panggilsuper(context, attrs);
Ini karena ketika Anda mengembang tampilan kustom, itu dibangun dengan dua parameter, bukan hanya satu. Ketika saya menyiasatinya, saya akan memperbaiki TouchImageView untuk mendukung tiga konstruktor tampilan dan drawable.<com.example.TouchImageView android:id="@+id/img" />
. Apakah kamu melakukan itu?Saya mengadaptasi beberapa kode untuk membuat TouchImageView yang mendukung multitouch (> 2.1). Itu terinspirasi oleh buku Halo, Android! (Edisi ke-3)
Itu terkandung dalam 3 file berikut TouchImageView.java WrapMotionEvent.java EclairMotionEvent.java
TouchImageView.java
WrapMotionEvent.java
EclairMotionEvent.java
sumber
WrapMotionEvent
danEclairMotionEvent
... pokoknya, +1.Saya menggunakan WebView dan memuat gambar dari memori melalui
WebView menangani semua panning zooming dan scrolling. Jika Anda menggunakan wrap_content tampilan web tidak akan lebih besar maka gambar dan tidak ada area putih ditampilkan. WebView adalah ImageView yang lebih baik;)
sumber
Dalam Respons terhadap pertanyaan awal Janusz, ada beberapa cara untuk mencapai ini yang semuanya bervariasi dalam tingkat kesulitannya dan telah dinyatakan di bawah ini. Menggunakan tampilan web itu bagus, tetapi sangat terbatas dalam hal tampilan dan rasa serta kemampuan kontrol. Jika Anda menggambar bitmap dari kanvas, solusi paling serbaguna yang telah diusulkan tampaknya adalah MikeOrtiz, Robert Foss's dan / atau apa yang disarankan Jacob Nordfalk. Ada contoh yang bagus untuk menggabungkan android-multitouch-controller oleh PaulBourke , dan sangat bagus untuk memiliki dukungan multi-touch dan semua jenis pandangan kustom.
Secara pribadi, jika Anda hanya menggambar kanvas ke bitmap dan kemudian menampilkannya di dalam dan ImageView dan ingin dapat memperbesar dan bergerak menggunakan multi touch, saya menemukan solusi MikeOrtiz sebagai yang termudah. Namun, untuk tujuan saya, kode dari Git yang ia sediakan tampaknya hanya berfungsi ketika kelas TouchImageView kustom ImageView adalah satu-satunya anak atau menyediakan tata letak params seperti:
Sayangnya karena desain tata letak saya, saya perlu "wrap_content" untuk "layout_height". Ketika saya mengubahnya ke ini gambar dipotong di bagian bawah dan saya tidak bisa menggulir atau memperbesar ke daerah yang dipotong. Jadi saya melihat Sumber untuk ImageView hanya untuk melihat bagaimana Android menerapkan "onMeasure" dan mengubah MikeOrtiz sesuai.
Di sini resolSize (int, int) adalah "Utilitas untuk merekonsiliasi ukuran yang diinginkan dengan batasan yang diberlakukan oleh MeasureSpec, di mana:
Parameter:
Pengembalian:
Jadi intinya memberikan perilaku yang sedikit lebih mirip dengan kelas ImageView asli ketika gambar dimuat. Beberapa perubahan lebih lanjut dapat dilakukan untuk mendukung variasi layar yang lebih besar yang mengubah rasio aspek. Tetapi untuk sekarang saya harap ini membantu. Terima kasih kepada MikeOrtiz untuk kode aslinya, kerja bagus.
sumber
Anda juga bisa mencobanya http://code.google.com/p/android-multitouch-controller/
Perpustakaannya sangat bagus, meski awalnya agak sulit untuk dipahami.
sumber
Saya baru saja mengintegrasikan TouchImageView Robert Foss: itu bekerja dengan baik di luar kotak! Terima kasih!
Saya baru saja memodifikasi sedikit kode sehingga saya bisa dapat instantiate dari layout.xml saya.
Cukup tambahkan dua konstruktor
dan mengubah konstruktor lama menjadi metode init:
sumber
@Robert Foss, @Mike Ortiz, terima kasih banyak atas pekerjaan Anda. Saya menggabungkan pekerjaan Anda, dan menyelesaikan kelas Robert untuk android> 2.0 dengan pekerjaan tambahan Mike.
Sebagai hasil dari pekerjaan saya, saya menghadirkan Android Touch Gallery, berdasarkan pada ViewPager dan menggunakan TouchImageView yang dimodifikasi. Gambar memuat dengan URL dan Anda dapat memperbesar dan menariknya. Anda dapat menemukannya di sini https://github.com/Dreddik/AndroidTouchGallery
sumber
Coba gunakan
ZoomView
untuk memperbesar tampilan lainnya.http://code.google.com/p/android-zoom-view/ mudah, gratis, dan menyenangkan untuk digunakan!
sumber
Menambahkan ke jawaban @ Mike. Saya juga perlu ketuk dua kali untuk mengembalikan gambar ke dimensi asli saat pertama kali dilihat. Jadi saya menambahkan seluruh tumpukan variabel instance "orig ..." dan menambahkan SimpleOnGestureListener yang melakukan trik.
sumber
Ini adalah tambahan yang sangat terlambat untuk utas ini tetapi saya telah mengerjakan tampilan gambar yang mendukung zoom dan pan dan memiliki beberapa fitur yang belum saya temukan di tempat lain. Ini dimulai sebagai cara untuk menampilkan gambar yang sangat besar tanpa menyebabkan
OutOfMemoryError
, dengan subsampling gambar ketika diperbesar dan memuat ubin resolusi lebih tinggi ketika diperbesar. Sekarang mendukung penggunaan dalamViewPager
, rotasi secara manual atau menggunakan informasi EXIF (berhenti 90 °), menimpa acara sentuh yang dipilih menggunakanOnClickListener
atau subclassing Anda sendiriGestureDetector
atauOnTouchListener
, untuk menambahkan overlay, menggeser sambil memperbesar, dan melemparkan momentum.Ini tidak dimaksudkan sebagai pengganti penggunaan umum untuk
ImageView
jadi tidak memperluasnya, dan tidak mendukung tampilan gambar dari sumber daya, hanya aset dan file eksternal. Ini membutuhkan SDK 10.Sumber ada di GitHub, dan ada contoh yang menggambarkan penggunaan di a
ViewPager
.https://github.com/davemorrissey/subsampling-scale-image-view
sumber
Anda dapat mencoba menggunakan LayoutParams untuk ini
ZoomIn = zoom (benar); ZoomOut = zoom (salah);
sumber
dan folder yang dapat digambar harus memiliki file gambar bticn. bekerja dengan sempurna :)
sumber
Sesuatu seperti di bawah ini akan melakukannya.
Untuk melihat program lengkap, lihat di sini: Program untuk memperbesar gambar di android
sumber