VectorDrawable - Android'in Lollipop öncesi sürümleri için bir şekilde mevcut mu? [kapalı]


88

Arka fon

Android'in artık " VectorDrawable " (ve ayrıca AnimatedVectorDrawable , BTW) adlı bir sınıf aracılığıyla bir tür vektör çizimini desteklediğini fark ettim . Android-Studio'daki yeniliklere bakarak bunu buldum .

Bu birden fazla klasöre (içine birden fazla dosya koymak zorunda sonu olurdu acaba mdpi, hdpi, xhdpi, vs). Bu harika olur ve bazı durumlarda uygulama boyutlarını en aza indirebilir.

Sorular

Bu yeni sınıfla ilgili birkaç soru sormak istiyorum:

  1. Eski Android sürümlerinde, belki de Google'ın destek kitaplığından oluşan bir kitaplık aracılığıyla kullanmak mümkün mü?

  2. Nasıl çalıştığını bilmiyorum ama Lollipop SVG dosyalarını işleyebilir mi? SVG dosyalarında elde edilebilen her şeyi yapabilir mi?

  3. Bulduğum dokümantasyon dışında herhangi bir örnek / eğitim / video var mı?


3
Bildiğim kadarıyla gördüğünüz gibi, VectorDrawable olan androidification SVG dosyaları. Yine de , üçüncü taraf kitaplıkların kullanımıyla bir yıldan fazla bir süredir SVG kullanıyorum . ( android-svg , svg-android ve benzeri). Benzer şekilde adlandırılmış olanlar var. Her biri diğerlerinden farklıdır, bu nedenle ihtiyaçlarınıza göre doğru seçim yapın.
Phantômaxx

7
SVG'yi xml kaynak vektörüne dönüştürmek için çevrimiçi bir araç yaptım (yalnızca lolipop) - inloop.github.io/svg2android - Erken alfada hala çok fazla test edilmedi. Basit svg dosyalarını destekliyor (android'in desteklediği gibi), Inkscape ile test ettim - bazı şekiller (dikdörtgen, daire, spiral ...) çizdim, hepsini seçip "Yol-> Nesne yola", * .svg'ye aktarılmış ve siteye bırakıldı, xml oluşturuldu ve iyi çalışıyor.
Yuraj

1
@Yuraj Vay canına, çok havalı! harika iş ! Ve bu kadar kısa sürede ... İşte + 1'imi al. :)
android geliştiricisi

İlgili inloop.github.io/svg2android ... O s a very usefull tool but Iise ... kötü biçimi hakkında notise ileri serbest bırakılması için ben bu aracı diliyorum Hmmm ... olur böyle bir durumda var uygunsuz sonuç ettik ve ben yanlış olduğunu bilmiyorum ben saf svg dosyalarını 3 partili kitaplarla birlikte kullandı, her şey yolunda ...
Alex Zezekalo

@AlexZezekalo Bunun hakkında Github web sayfasına yazmalısınız
android geliştirici

Yanıtlar:


39

Mart 2016 GÜNCELLEME

By Android Destek Kitaplığı 23.2.1 güncellemesi, Destek Vektör Drawables ve Animasyonlu Vektör Drawables. (aynı şekilde latestone da kullanabilirsiniz)

Lütfen gradle dosyasındaki bir kitaplığın sürümünü güncelleyin.

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

Vektör çizimleri, birden çok png varlığını XML'de tanımlanan tek bir vektör grafiği ile değiştirmenize olanak tanır . Daha önce Lollipop ve sonraki sürüm cihazlar ile sınırlı iken , hem VectorDrawableve AnimatedVectorDrawableşimdi iki yeni Destek Kütüphaneler edinilebilir destek-vektör çekilebilir ve animasyonlu-vektör çekilebilir. app:srcCompatreferans vektör çekmecelerine yeni nitelik.

Bazı örnek örneklerle github'daki kaynağı kontrol edin .

V7 appcompat kitaplığı için değişiklikler:

Vektör varlıklarına olan bağımlılık, appcompat kitaplığını kullanan geliştiricilerin kullanmaya zorlanmaması VectorDrawableve ilişkili yapı bayraklarını kullanması için geri döndürüldü .


3
Vektör desteği hakkında, gradle eklentisini güncellemek ve "vectorDrawables.useSupportLibrary = true" "defaultConfig" içinde kullanmak yeterli değil mi?
android geliştiricisi

1
evet, Gradle Plugin 2.0+ ve Gradle Plugin 1.5 için eklemeniz gerekir -> android {defaultConfig {generatedDensities = []} // Bu, sizin için 2.0+ Gradle Plugin aaptOptions {additionalParameters "--no-version tarafından işlenir
-vektörler

1
Ayrıca, lütfen burada biraz kod gösterin. Bir bağlantı bir gün kesilebilir. Bu çaba için +1 alacaksınız :)
android geliştiricisi

Evet elbette. kodu git ve buraya kısa sürede gönderecek.
Amit Vaghela

2
compileYukarıdaki ifade ima proje kullandığı RecyclerViewher zaman böyle değildir.
razzledazzle

14

Güncelleme 2 : Destek Kitaplığı 23.4.0'da tekrar etkinleştirirler:

AppCompat kullanıcıları için, AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) aracılığıyla kaynaklardan Vector Drawables desteğini yeniden etkinleştirmek için bir katılım API'si ekledik (23.2'de bulunan davranış) - bunun hala bellek kullanımıyla ilgili sorunlara neden olabileceğini Yapılandırma örneklerini güncelleme sorunları, bu nedenle varsayılan olarak devre dışı bırakılmasının nedeni.

Şimdi mevcut olan bu 23.4.0'ı kontrol edin

Güncelleme : Bu sürümden 23.3.0 kontrol çalışmaz burada detaylar için. Proxy çekmeceleri çalışmıyor. app:srcCompatve setImageResource()ancak çalışın.


Vector Drawable desteği, 23.2 ve sonraki sürümlerin Destek Kitaplığından edinilebilir. Bununla birlikte, bu çekilebilir malzemeleri doğru şekilde kullanmak için dolaylı olarak başvurulmaları gerekir.

İlk adım, AppCompatsürümü çarpmak olacaktır .

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

İkinci olarak Vector Drawable desteğini etkinleştirin. Gradle eklentisi kullanıyorsanız, 2.0+

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
}

Aksi takdirde

android {  
   defaultConfig {  
     generatedDensities = []  
   }  

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

Üçüncü olarak, bağlantılı cevaba bakın .


evet, bunu gördüm. Genişletilmiş bilgi için teşekkürler. Sistem çapında şeyler (bildirimler, widget'lar, ...) için bunun elbette mevcut olmadığını varsayıyorum ...
android geliştiricisi

Çalışması gerektiğinden emin. Temelde bu noktadan itibaren çekilebilir öğelere referans veriyor. Bunu denediniz mi? Oradaki örnek MenuItem, iyi çalışan bir vektörü çekilebilir bir vektör olarak ayarlar .
razzledazzle

Bildirimler ve widget'lar için bile çalışacağından emin misiniz? Eski Android sürümlerinde çalışmasını sağlamaktan bahsediyorum. Bunun için vektörleri nasıl ele alabilirler? Destek kitaplığını kullanamazlar, değil mi?
android geliştiricisi

Destek Kitaplığı sürümünü kullanmanın tüm amacı, eski sürümlerde işlerin yürümesini sağlamaktır. Belgelendiği gibi, API 7'ye ve API 11'den Animasyonlu vektör
çekmecelerine kadar çalışır.

Yine, bu uygulama içinde çalışır, ancak ya bunları bildirimler ve widget'lar gibi dışarıda kullanmayı denerseniz? Orada çalışacağını sanmıyorum, çünkü diğer uygulamaları (başlatıcıları) bırakın bildirim çubuğunu destek kitaplığını kullanabileceğini sanmıyorum. Bunu denediniz mi?
android geliştiricisi

12

Bu destek kitaplığını deneyebilirsiniz . Lollipop'ta sunulan VectorDrawable ve AnimatedVectorDrawable'ı tamamen geriye dönük uyumlulukla destekler.


Bu kitaplık yalnızca API seviyesi 14 ve üstü ile uyumludur, oysa Mr Vector kitaplığı 7+ ile uyumludur.
donturner

@donturner: Söylediğinize katılıyorum, ancak geliştiricilerin hala 7 API için uygulama geliştirdiğini sanmıyorum.
V_J

4
Belki API 7 değil, ancak kesinlikle API 10 (Gingerbread), çünkü bu, Android pazarının% 4,1'ini oluşturuyor ( developer.android.com/about/dashboards/index.html ).
donturner

8

Buradaki yanıtların bazılarını tamamlamak için: evet, VectorDrawables öncesi Lollipop için , en azından kısmi olarak destek alabilirsiniz .

Ne kadar kısmi? Duruma göre değişir - yardımcı olması için bu şemayı yaptım (Destek Kitaplığı 23.4.0 - - en az - 25.1.0 için geçerlidir).

VectorDrawable hile sayfası


Gerçekten, ancak png dosyalarını otomatik olarak oluşturmasına izin verirseniz güvenli olması gerektiğini düşünüyorum
android geliştiricisi

1
Kesin bir şekilde açıklanmıştır.
Abhijit Kurane

Kabul edilen cevap bu olmalıdır. Teşekkürler.
Justin Meiners

6

Maalesef şu anda VectorDrawable ve AnimatedVectorDrawable, destek kitaplığında mevcut değildir. Ancak bu özelliği Lollipop Öncesi sürümlerde kullanmak için MrVector adlı resmi olmayan arka portu kullanabilirsiniz.

MrVector, Github'da mevcuttur ve 7+ Android sürümlerini destekleyecektir.

Resmi Benioku'dan

MrVector bağımlılığı eklemek için, build.gradle bağımlılıkları bloğunuza aşağıdaki satırı ekleyin.

compile 'com.telly:mrvector:0.2.0'

Vektör XML'den çekilebilir öğe oluşturmak için,

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

Bu yardımcı olur umarım.


1
MrVector, destek kitaplığının bir parçası olacak olan yaklaşan VectorDrawableCompat lehine birkaç gün önce kullanımdan kaldırıldı.
WindRider

Bu gerçekten havalı. Bilgi için teşekkürler.
gnuanu

Evet, uygulamamı bazı koca götlü
SVG'lerle süslemek için sabırsızlanıyorum

1
Kullanımdan kaldırıldı. Bunun yerine bu stackoverflow.com/a/30502261/1954675'i kullanın.
V_J

3

VectorDrawable kullanıyorsanız, Android Studio, Lollipop Öncesi sürümler için PNG dosyalarını (XML dosyalarınıza göre) otomatik olarak oluşturur.

Oluşturulan PNG dosyalarının, 21'in altındaki API çalıştıran cihazlarda VectorDrawables yerine BitmapDrawables olarak kabul edildiğini ve bu nedenle bu cihazlarda canlandırılamayacağını veya benzer olamayacağını unutmayın.

Daha fazla ayrıntı için "geriye dönük uyumluluk" konusuna bakın: http://android-developers.blogspot.co.at/2015/09/android-studio-14.html


Evet, yakın zamanda yayınlandı. Bununla birlikte, vektörleri kullanmak yerine PNG kullanıyor, bu yüzden resmi tutan imageView boyutunu değiştirirsem pikselli / bulanık olacaktır.
android geliştiricisi

@android geliştirici: Kısmen haklısınız. Bu davranış ortaya çıkar, ancak bu VectorDrawables için aynı olacaktır. Her VectorDrawable'ın XML'si içinde tanımlanmış bir genişliği ve yüksekliği vardır (örneğin, vector_drawable.xml). Bu genişlik / yükseklik 50x50dp olarak ayarlanmışsa ancak ImageView boyutunu 100x100dp olarak ayarladıysanız, Android 5.0 çalıştırıyor olsanız bile (ve bu nedenle otomatik olarak oluşturulan bir BitmapDrawable yerine VectorDrawable'ı kullanıyor olsanız bile) sonuç yine de bulanık olacaktır. Bir VectorDrawable'ın yaygın bir Bitmap'e göre gerçek yararı, ekran dpi'yi hesaba katması ve bu nedenle 4k ekranlarda bile bulanıklaşmamasıdır.
Mehlyfication

VectorDrawable'ın kendisi için ayarlanmamış bir boyut kullanırken iyi görünmediğini mi söylüyorsunuz? Ama bu vektörleştirilmiş bir içerik .... Aksi halde neden işe yarasın?
android geliştiricisi

Animated Vector Drawables için de pngs oluşturur mu?
Louis CAD

Hayır, bu durum için PNG oluşturmaz. Vektör çizimini Android 5.0'dan önceki Android sürümünü çalıştıran cihazlarda canlandırmak istiyorsanız VectorDrawableCompat'ı deneyebilirsiniz: developer.android.com/reference/android/support/graphics/…
Mehlyfication

3

Lollipop, üçüncü taraf kitaplıklar olmadan SVG dosyalarını işleyemez.

Bulduğum en iyi çözüm, BetterVectorDrawable lib ile birlikte SVG to VectorDrawable Converter .

BetterVectorDrawable , Android 5.0+ üzerinde yapılandırılabilir geri dönüş davranışına sahip Android 4.0+ için VectorDrawable uygulamasıdır.

SVG to VectorDrawable Converter , SVG görüntülerinin Android VectorDrawable XML kaynak dosyalarına toplu dönüştürücüsüdür. Çevrimiçi sürüm

Bağlantılar, kitaplık ve dönüştürücünün nasıl kullanılacağına dair yeterli bilgi sağlayan benioku'yu işaret eder.


2

Şu anda destek kitaplığında VectorDrawables yok.

Funkystein haklı - VectorDrawable, Android'in performansa odaklanabilmesi için en çok talep gören vektör çiziminin özelliklerini destekleyen SVG'ye benzer. pathData, örneğin SVG'nin "d" dizesiyle aynı biçime sahiptir.


Yani bu, yalnızca Lollipop yeterince popüler olduğunda geçerli olacaktır ve o zaman bile pek çok özellik sağlamaz. :(
android geliştiricisi

Yeni vektör API'lerine ilişkin herhangi bir öğretici / örnek / video biliyor musunuz?
android geliştiricisi


1

Harika haber, Google'ın Android Destek Kitaplığı 23.2'yi Destek Vektör Çekilebilirleri ve Animasyonlu Vektör Çekilebilirleri yayınlamasıdır !

Ancak bu kitaplığı Google'dan önce taşıyan kişilere teşekkürler!

AppCompat kitaplıklarının harika olduğu yer burasıdır, Android'in birçok yeni özelliğini çok daha önceki sürümlere geri getirebilirler. Yeni uygulanan VectorDrawable sınıfıyla, geliştiriciler artık vektör görüntülerini API 7'ye (Android 2.1 Eclair) kadar kullanabilirler. Animasyonlu vektörler biraz daha sınırlıdır, yalnızca API 11'e (Android 3.0 Honeycomb) kadar gider, ancak bu, bugün aktif kullanımda olan cihazların% 97'sinden fazlasını kapsamaktadır.

Kullanım kılavuzu:

Bakınız " yaş-of-the-vektörler " @chrisbanes tarafından


1
Güzel! yeni destek kitaplığının vektörler API'sinin nasıl kullanılacağıyla ilgili bazı örnekleri / öğreticileri paylaşır mısınız?
android geliştiricisi

Elbette ! zaten bunu haftasonuma yapılacaklar listesine ekledim :)
LOG_TAG

1
Teşekkür ederim. Kısa ise lütfen buraya da yazın.
android geliştiricisi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.