Saya mencoba menggunakan vector drawable di aplikasi Android saya. Dari http://developer.android.com/training/material/drawables.html (penekanan saya):
Di Android 5.0 (API Level 21) dan yang lebih baru, Anda bisa menentukan vector drawable, yang menskalakan tanpa kehilangan definisi.
Menggunakan drawable ini:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="@color/colorPrimary" android:pathData="M14,20A2,2 0 0,1 12,22A2,2 0 0,1 10,20H14M12,2A1,1 0 0,1 13,3V4.08C15.84,4.56 18,7.03 18,10V16L21,19H3L6,16V10C6,7.03 8.16,4.56 11,4.08V3A1,1 0 0,1 12,2Z" />
dan ImageView ini:
<ImageView
android:layout_width="400dp"
android:layout_height="400dp"
android:src="@drawable/icon_bell"/>
menghasilkan gambar buram ini saat mencoba menampilkan ikon pada 400dp (pada perangkat seluler beresolusi tinggi yang besar sekitar tahun 2015 yang menjalankan lollipop):
Mengubah lebar dan tinggi dalam definisi drawable vektor menjadi 200dp secara signifikan meningkatkan situasi pada ukuran yang dirender 400dp. Namun, menyetel ini sebagai drawable untuk elemen TextView (yaitu ikon di sebelah kiri teks) sekarang membuat ikon besar.
Pertanyaan saya:
1) Mengapa ada spesifikasi lebar / tinggi pada drawable vektor? Saya pikir intinya adalah bahwa skala naik dan turun tanpa kerugian membuat lebar dan tinggi menjadi tidak berarti dalam definisinya?
2) Apakah mungkin untuk menggunakan satu vector drawable yang berfungsi sebagai drawable 24dp pada TextView tetapi dapat diskalakan dengan baik untuk menggunakan gambar yang jauh lebih besar juga? Misalnya, bagaimana cara menghindari pembuatan beberapa vektor yang dapat digambar dengan ukuran berbeda dan sebagai gantinya menggunakan salah satu skala yang sesuai dengan persyaratan yang saya berikan?
3) Bagaimana cara saya menggunakan atribut lebar / tinggi secara efektif dan apa perbedaannya dengan viewportWidth / Height?
Detil tambahan:
- Perangkat menjalankan API 22
- Menggunakan Android Studio v1.5.1 dengan Gradle versi 1.5.0
- Manifes adalah kompilasi dan target level 23, min level 15. Saya juga mencoba memindahkan min level ke 21, tapi ini tidak ada bedanya.
- Mendekompilasi APK (dengan set level minimal ke 21) menunjukkan satu sumber daya XML dalam folder drawable. Tidak ada gambar raster yang dihasilkan.
New -> Vector Asset
, XML gambar vektor akan jatuh ke folder drawable saya. Namun jika saya menggunakan apktool untuk membongkar APK yang dibangun, saya melihat bahwa file XML adadrawable-anydpi-v21
dan menskalakan dengan benar pada perangkat API 21+. File raster ditempatkan didrawable-<mdpi/hdpi/etc>-v4
folder dan tidak digunakan pada perangkat API 21+ (berdasarkan fakta bahwa skalanya dengan benar)