Saya mencoba menggunakan a VectorDrawable
dalam LayerList
tanpa skala vektor. Sebagai contoh:
<layer-list>
<item android:drawable="@color/grid_item_activated"/>
<item android:gravity="center" android:drawable="@drawable/ic_check_white_48dp"/>
</layer-list>
ic_check_white_48dp
Id drawable didefinisikan sebagai:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
</vector>
Efek yang diinginkan adalah ikon centang dipusatkan di layer drawable, tanpa penskalaan. Masalahnya adalah, daftar lapisan di atas menyebabkan ikon centang diskalakan agar sesuai dengan ukuran lapisan.
Saya dapat menghasilkan efek yang diinginkan jika saya mengganti vector drawable dengan PNG untuk setiap kepadatan dan memodifikasi daftar-lapisan seperti:
<layer-list>
<item android:drawable="@color/grid_item_activated"/>
<item>
<bitmap android:gravity="center" android:src="@drawable/ic_check_white_48dp"/>
</item>
</layer-list>
Apakah ada cara agar saya dapat melakukan ini dengan menggunakan VectorDrawable
?
Jawaban:
Saya mengalami masalah yang sama saat mencoba memusatkan vector drawable pada daftar berlapis.
Saya punya solusi, tidak persis sama tetapi berhasil, Anda perlu menetapkan ukuran untuk seluruh drawable dan menambahkan padding ke item vektor:
Ukuran bentuk di atas menyetel ukuran seluruh drawable, dalam contoh ini 120dp, padding pada item kedua, 24dp dalam contoh ini, memusatkan gambar vektor.
Ini tidak sama dengan menggunakan
gravity="center"
tetapi cara kerjanya menggunakan vektor di API 21 dan 22.sumber
gravity="center"
di API 21 dan 22.windowBackground
. Ukuran eksplisit tidak melakukan apa pun dalam kasus ini. Dan itu juga tidak berhasil jika saya meletakkan daftar lapisan di dalam daftar lapisan lain.Telah berjuang dengan masalah yang sama. Satu-satunya cara yang saya temukan untuk memperbaiki ini dan menghindari drawable untuk ditingkatkan adalah dengan menyetel ukuran drawable dan menggunakan gravitasi untuk menyelaraskannya:
Semoga membantu!
sumber
width
atribut tidak tersedia pada level API tersebut. Pada API 23, ini tidak diperlukan, karena bug telah diperbaiki dan drawable tidak diregangkan lagi.Solusi yang diedit yang akan membuat SplashScreen Anda tampak hebat di semua API termasuk API21 hingga API23
Pertama-tama baca artikel ini dan ikuti cara BAGUS membuat layar splash.
Jika logo Anda terdistorsi atau tidak sesuai dan Anda hanya menargetkan APIs24 + Anda cukup menurunkan drawable vektor Anda langsung di file xml seperti:
pada kode di atas saya mengubah ukuran drawable yang saya gambar di kanvas 640x640 menjadi 240x240. lalu saya taruh saja di layar splash drawable saya seperti itu dan itu berfungsi dengan baik:
kode saya sebenarnya hanya menggambar segitiga pada gambar di bagian bawah tetapi di sini Anda melihat apa yang dapat Anda capai dengan ini. Resolusi akhirnya bagus dibandingkan dengan tepi pixelated yang saya dapatkan saat menggunakan bitmap. jadi gunakan drawable vektor dengan segala cara (ada situs bernama vectr yang saya gunakan untuk membuat milik saya tanpa perlu mengunduh perangkat lunak khusus).
EDIT untuk membuatnya berfungsi juga di API21-22-23
Sementara solusi di atas berfungsi untuk perangkat yang menjalankan API24 +, saya benar-benar kecewa setelah menginstal aplikasi saya, perangkat yang menjalankan API22. Saya perhatikan bahwa splashscreen lagi-lagi mencoba memenuhi seluruh tampilan dan terlihat seperti kotoran. Setelah merobek alis saya selama setengah hari, saya akhirnya memaksakan solusi dengan kemauan keras.
Anda perlu membuat file kedua dengan nama persis seperti splashscreen xml (katakanlah splash_screen.xml) dan letakkan ke dalam 2 folder bernama drawable-v22 dan drawable-v21 yang akan Anda buat di folder res / (untuk melihatnya, Anda harus mengubah tampilan proyek Anda dari Android ke Proyek). Ini berfungsi untuk memberi tahu ponsel Anda untuk mengalihkan ke file yang ditempatkan di folder tersebut setiap kali perangkat yang relevan menjalankan API yang sesuai dengan sufiks -vXX di folder drawable, lihat tautan ini . tempatkan kode berikut di Daftar lapisan file splash_screen.xml yang Anda buat di folder ini:
Untuk beberapa alasan untuk API ini, Anda harus membungkus drawable Anda dalam bitmap untuk membuatnya berfungsi dan hasil akhirnya terlihat sama. Masalahnya adalah Anda harus menggunakan pendekatan dengan folder drawable tambahan karena versi kedua dari file splash_screen.xml akan menyebabkan layar splash Anda tidak ditampilkan sama sekali pada perangkat yang menjalankan API yang lebih tinggi dari 23. Anda mungkin juga harus menempatkannya versi pertama splash_screen.xml ke dalam drawable-v24 sebagai default android ke folder drawable-vXX terdekat yang dapat ditemukannya untuk sumber daya.
sumber
Saat ini saya sedang mengerjakan splash screen dengan vector drawable yang berada di tengah baik secara horizontal maupun vertikal. Inilah yang saya dapatkan di API level 25:
Jika Anda ingin menyesuaikan dimensi drawable vektor, memodifikasi
android:width
danandroid:height
atribut di atas, tidak perlu memodifikasi drawable asli.Selain itu, pengalaman saya JANGAN meletakkan vector drawable dalam tag bitmap, yang tidak pernah berhasil untuk saya. Bitmap adalah untuk file format .png, .jpg dan .gif, bukan untuk drawable vektor.
Referensi
https://developer.android.com/guide/topics/resources/drawable-resource#LayerList
https://developer.android.com/guide/topics/resources/more-resources.html#Dimension
sumber