VectorDrawable - apakah ini tersedia untuk Android versi pra-Lollipop? [Tutup]

88

Latar Belakang

Saya perhatikan bahwa Android sekarang mendukung beberapa jenis gambar vektor, melalui kelas yang disebut " VectorDrawable " (dan juga AnimatedVectorDrawable , BTW). Saya telah menemukannya dengan melihat apa yang baru di Android-Studio .

Aku ingin tahu apakah ini akan menjadi akhir harus menempatkan beberapa file ke dalam beberapa folder ( mdpi, hdpi, xhdpi, dll). Itu akan bagus dan mungkin meminimalkan ukuran aplikasi pada beberapa kasus.

Pertanyaan-pertanyaan

Saya ingin mengajukan beberapa pertanyaan tentang kelas baru ini:

  1. Apakah mungkin untuk menggunakannya di versi Android yang lebih lama, mungkin melalui pustaka bahkan pustaka dukungan Google?

  2. Saya tidak terbiasa dengan cara kerjanya, tetapi dapatkah Lollipop menangani file SVG? Bisakah itu melakukan apa pun yang dapat dicapai pada file SVG?

  3. Apakah ada contoh / tutorial / video yang menggunakannya, selain dokumentasi yang saya temukan?

pengembang android
sumber
3
Sejauh yang saya bisa lihat, VectorDrawable adalah androidifikasi file SVG. Saya menggunakan SVG selama lebih dari satu tahun melalui penggunaan perpustakaan pihak ke - 3 . ( android-svg , svg-android dan semacamnya). Ada yang bernama serupa. Masing-masing berbeda dari yang lain, jadi, pilihlah secara akurat tergantung kebutuhan Anda.
Phantômaxx
7
Saya telah membuat alat online untuk mengubah SVG menjadi vektor sumber daya xml (hanya lollipop) - inloop.github.io/svg2android - Itu belum banyak diuji masih dalam alpha awal. Ini mendukung file svg sederhana (sebagai dukungan android), saya telah mengujinya dengan inkscape - menggambar beberapa bentuk (persegi, lingkaran, spiral ...), pilih semua lalu "Path-> Object to path", diekspor ke * .svg dan masuk ke situs, menghasilkan xml dan berfungsi dengan baik.
Yuraj
1
@Yuraj Wow, keren sekali! kerja bagus ! Dan dalam waktu sesingkat itu ... Ini, ambil +1 saya. :)
pengembang android
Mengenai inloop.github.io/svg2android ... Ada s a very usefull tool but Ihasil yang tidak benar dalam kasus seperti itu dan saya tidak tahu apa yang salah ... Hmmm, untuk rilis lebih lanjut saya berharap alat ini akan memberi tahu tentang format yang buruk ... Jika saya menggunakan file-svg murni dengan 3-pihak libs semuanya Ok ...
Alex Zezekalo
@AlexZezekalo Anda harus menulis tentang itu di halaman web Github-nya: github.com/inloop/svg2android
pengembang android

Jawaban:

39

UPDATE PADA Maret 2016

Dengan pembaruan Android Support Library 23.2.1 , Mendukung Vector Drawable dan Animated Vector Drawable. (Anda juga dapat menggunakan latestone untuk hal yang sama)

Harap perbarui versi pustaka dalam file gradle.

compile 'com.android.support:recyclerview-v7:23.2.1'

Sumber daya dapat digambar dengan vektor memungkinkan Anda mengganti beberapa aset png dengan satu grafik vektor , yang ditentukan dalam XML. Meskipun sebelumnya terbatas pada Lollipop dan perangkat yang lebih tinggi , keduanya VectorDrawabledan AnimatedVectorDrawablesekarang tersedia melalui dua Support Library baru, support-vector-drawable dan animated-vector-drawable. app:srcCompatatribut baru untuk mereferensikan vector drawable.

Periksa sumber di github dengan beberapa contoh contoh .

Perubahan untuk pustaka appcompat v7:

Ketergantungan yang dikembalikan pada aset vektor sehingga pengembang yang menggunakan pustaka appcompat tidak dipaksa untuk menggunakan VectorDrawabledan tanda build yang terkait.

Amit Vaghela
sumber
3
Tentang dukungan vektor, bukankah cukup dengan memperbarui plugin gradle dan menggunakan "vectorDrawables.useSupportLibrary = true" di dalam "defaultConfig"?
Pengembang android
1
ya, untuk Gradle Plugin 2.0+ dan untuk Gradle Plugin 1.5 Anda perlu menambahkan -> android {defaultConfig {generatedDensities = []} // Ini ditangani untuk Anda oleh 2.0+ Gradle Plugin aaptOptions {additionalParameters "--no-version -vectors "}}
Amit Vaghela
1
Juga, tunjukkan beberapa kode di sini. Tautan mungkin mati suatu hari nanti. Anda akan mendapatkan +1 untuk upaya ini :)
pengembang android
ya tentu saja. akan memposting kode dalam waktu singkat di git dan di sini.
Amit Vaghela
2
The compilepernyataan di atas menyiratkan bahwa penggunaan proyek RecyclerViewyang tidak selalu terjadi.
razzledazzle
14

Pembaruan 2 : Mereka mengaktifkannya lagi di Support Library 23.4.0:

Untuk pengguna AppCompat, kami telah menambahkan API keikutsertaan untuk mengaktifkan kembali dukungan Vector Drawable dari sumber daya (perilaku yang ditemukan di 23.2) melalui AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) - perlu diingat bahwa hal ini masih dapat menyebabkan masalah dengan penggunaan memori dan masalah saat memperbarui contoh Konfigurasi, oleh karena itu mengapa itu dinonaktifkan secara default.

Periksa 23.4.0 ini tersedia sekarang

Pembaruan : Ini tidak berfungsi dari versi 23.3.0 Periksa di sini untuk detailnya. Proxy drawable tidak berfungsi. app:srcCompatdan setImageResource()bekerja, bagaimanapun.


Dukungan Vector Drawable tersedia dari Support Library versi 23.2 dan yang lebih baru. Namun, untuk menggunakan drawable tersebut dengan benar, mereka harus direferensikan secara tidak langsung.

Langkah pertama adalah meningkatkan AppCompatversi.

compile 'com.android.support:appcompat-v7:23.2.0'

Kedua, aktifkan dukungan Vector Drawable. Jika menggunakan plugin Gradle, 2.0+

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
}

Jika tidak

android {  
   defaultConfig {  
     generatedDensities = []  
   }  

   aaptOptions {  
     additionalParameters "--no-version-vectors"  
   }  
}

Ketiga , lihat jawaban terkait .

razzledazzle
sumber
ya, saya melihat ini. Terima kasih atas info lengkapnya. Saya berasumsi bahwa untuk hal-hal luas sistem (notifikasi, widget, ...) ini tentu saja tidak tersedia ...
pengembang android
Yakin bahwa itu harus berhasil. Ini pada dasarnya mereferensikan drawable sejak saat itu. Apakah kamu sudah mencobanya Contoh di sana menyetel vector drawable ke a MenuItem, yang berfungsi dengan baik.
razzledazzle
Apakah Anda yakin ini akan berfungsi bahkan untuk notifikasi dan widget? Saya berbicara tentang membuatnya berfungsi pada versi Android lama. Bagaimana mereka menangani vektor untuk ini? Mereka tidak dapat menggunakan pustaka dukungan, bukan?
Pengembang android
Inti dari menggunakan versi Pustaka Dukungan adalah membuat semuanya berfungsi di versi yang lebih lama. Seperti yang didokumentasikan, ini bekerja kembali ke API 7 dan Animated vector drawable dari API 11.
razzledazzle
Sekali lagi, ini berfungsi di dalam aplikasi, tetapi bagaimana jika Anda mencoba menggunakannya di luar, seperti pada notifikasi dan widget? Saya tidak berpikir itu akan berfungsi di sana, karena saya rasa Anda tidak dapat membuat aplikasi lain (peluncur) menggunakan pustaka dukungan, apalagi bilah notifikasi. Apakah kamu sudah mencobanya
Pengembang android
12

Anda dapat mencoba perpustakaan dukungan ini . Ini mendukung VectorDrawable dan AnimatedVectorDrawable yang diperkenalkan di Lollipop dengan kompatibilitas mundur sepenuhnya.

V_J
sumber
Library tersebut hanya kompatibel dengan API level 14 ke atas, sedangkan library Mr Vector kompatibel hingga 7+.
donturner
@donturner: Saya setuju dengan maksud Anda, tetapi saya tidak berpikir pengembang masih mengembangkan aplikasi untuk 7 API.
V_J
4
Mungkin bukan API 7, tapi yang pasti API 10 (Gingerbread) karena ini menyumbang 4,1% dari pasar Android ( developer.android.com/about/dashboards/index.html ).
donturner
8

Untuk melengkapi beberapa jawaban di sini: ya, Anda bisa mendapatkan dukungan untuk VectorDrawables pra-Lollipop , setidaknya sebagian.

Seberapa parsial? Itu tergantung - Saya telah membuat diagram ini untuk membantu (berlaku untuk Support Library 23.4.0 hingga - setidaknya - 25.1.0).

Cheatsheet VectorDrawable

David Ferrand
sumber
Memang, tapi saya pikir jika Anda mengizinkannya untuk menghasilkan file png secara otomatis, itu seharusnya aman
pengembang android
1
Dijelaskan dengan cara yang tepat.
Abhijit Kurane
Ini harus menjadi jawaban yang diterima. Terima kasih.
Justin Meiners
6

Sayangnya, untuk saat ini VectorDrawable dan AnimatedVectorDrawable tidak tersedia di pustaka dukungan. Tetapi untuk memanfaatkan fitur ini dalam versi Pra-Lollipop, Anda dapat menggunakan backport tidak resmi yang disebut MrVector.

MrVector tersedia di Github dan akan mendukung Android versi 7+.

Dari Readme resmi

Untuk menambahkan dependensi MrVector, tambahkan baris berikut ke blok dependensi build.gradle Anda.

compile 'com.telly:mrvector:0.2.0'

Untuk membuat drawable dari vektor XML,

Drawable drawable = MrVector.inflate(getResources(), R.drawable.vector_android);

Semoga ini membantu.

gnuanu
sumber
1
MrVector sudah tidak digunakan lagi beberapa hari yang lalu untuk mendukung VectorDrawableCompat mendatang yang akan menjadi bagian dari pustaka dukungan.
WindRider
Itu keren sekali. Terimakasih atas infonya.
gnuanu
Ya, saya tidak sabar untuk mempercantik aplikasi saya dengan SVG gemuk-ass: D
WindRider
1
Tidak digunakan lagi. Gunakan stackoverflow.com/a/30502261/1954675 ini sebagai gantinya.
V_J
3

Jika Anda menggunakan VectorDrawable, Android Studio akan secara otomatis membuat file PNG yang sesuai (berdasarkan file XML Anda) untuk versi Pre-Lollipop.

Perhatikan bahwa file PNG yang dihasilkan tersebut dianggap BitmapDrawables, bukan VectorDrawables pada perangkat yang menjalankan API di bawah 21 dan oleh karena itu tidak dapat dianimasikan atau serupa pada perangkat tersebut.

Lihat "kompatibilitas mundur" untuk detail lebih lanjut: http://android-developers.blogspot.co.at/2015/09/android-studio-14.html

Mehlyfication
sumber
Ya, itu diterbitkan baru-baru ini. Namun, ini menggunakan PNG, daripada menggunakan vektor, jadi jika saya mengubah ukuran imageView yang menampung gambar, itu akan menjadi pixelated / blurry.
Pengembang android
Pengembang @android: Anda sebagian benar. Perilaku ini akan terjadi, tetapi akan sama untuk VectorDrawables. Setiap VectorDrawable memiliki lebar dan tinggi yang ditentukan dalam XML-nya (mis. Vector_drawable.xml). Jika lebar / tinggi ini disetel ke 50x50dp tetapi Anda menyetel ukuran ImageView ke 100x100dp, hasilnya akan tetap buram meskipun Anda menjalankan Android 5.0 (dan karena itu menggunakan VectorDrawable, bukan BitmapDrawable yang dibuat secara otomatis). Manfaat nyata dari VectorDrawable dibandingkan Bitmap umum adalah ia menangani screen-dpi ke dalam akun dan karenanya tidak akan kabur bahkan pada tampilan 4k.
Mehlyfication
Maksud Anda VectorDrawable tidak tampil dengan baik saat menggunakan ukuran yang tidak disetel untuknya? Tapi itu adalah konten vektor .... Mengapa itu berfungsi sebaliknya?
Pengembang android
Apakah itu juga menghasilkan png untuk Animated Vector Drawables?
Louis CAD
Tidak, itu tidak akan membuat PNG untuk kasus itu. Jika Anda ingin menganimasikan vector drawable pada perangkat yang menjalankan versi Android sebelum Android 5.0, Anda mungkin ingin mencoba VectorDrawableCompat: developer.android.com/reference/android/support/graphics/…
Mehlyfication
3

Lollipop tidak dapat menangani file SVG tanpa libs pihak ketiga.

Solusi terbaik yang saya temukan adalah lib BetterVectorDrawable bersama dengan SVG to VectorDrawable Converter .

BetterVectorDrawable adalah implementasi VectorDrawable untuk Android 4.0+ dengan perilaku fall-back yang dapat dikonfigurasi di Android 5.0+.

SVG to VectorDrawable Converter adalah pengonversi batch gambar SVG ke file sumber daya XML Android VectorDrawable. Versi online

Tautan mengarah ke readmes, yang memberikan informasi yang cukup tentang cara menggunakan lib dan konverter.

Mahasiswa
sumber
2

Tidak ada VectorDrawables di pustaka dukungan saat ini.

Funkystein benar - VectorDrawable mirip dengan SVG, hanya mendukung fitur gambar vektor yang paling banyak diminati sehingga android bisa fokus pada performa. pathData, misalnya, memiliki format yang sama dengan string "d" SVG.

George Mount
sumber
Jadi ini hanya akan relevan ketika Lollipop menjadi cukup populer, dan bahkan kemudian, tidak menyediakan banyak fitur. :(
pengembang android
Apakah Anda mengetahui tutorial / sampel / video tentang API vektor baru?
Pengembang android
2
Saya telah menemukannya sekarang: blog.sqisland.com/2014/10/… , github.com/chiuki/animated-vector-drawable
pengembang android
1

Kabar baiknya adalah Google merilis Android Support Library 23.2 Support Vector Drawable dan Animated Vector Drawables!

Tapi terima kasih kepada orang-orang yang mem-porting perpustakaan ini sebelum Google!

Di sinilah pustaka AppCompat sangat bagus, mereka dapat mengembalikan banyak fitur baru Android ke versi yang jauh lebih lama. Dengan kelas VectorDrawable yang baru diimplementasikan, developer sekarang dapat menggunakan gambar vektor sepenuhnya kembali ke API 7 (Android 2.1 Eclair). Vektor animasi sedikit lebih terbatas, hanya sejauh API 11 (Android 3.0 Honeycomb), tetapi itu masih mencakup lebih dari 97% perangkat yang digunakan secara aktif saat ini

Panduan penggunaan:

Lihat " age-of-the-vektor " oleh @chrisbanes

LOG_TAG
sumber
1
Bagus! bisakah Anda membagikan beberapa contoh / tutorial tentang cara menggunakan API vektor pustaka dukungan yang baru?
Pengembang android
Tentu ! sudah menambahkan itu ke daftar tugas akhir pekan saya! :)
LOG_TAG
1
Terima kasih. Jika singkat, silahkan tulis juga disini.
Pengembang android