VectorDrawable - czy jest on dostępny w wersji pre-Lollipop na Androida? [zamknięte]

zamknięte . To pytanie musi być bardziej skoncentrowane. Obecnie nie przyjmuje odpowiedzi.

Chcesz poprawić to pytanie? Update the question so it edytując ten post.

Zamknięte 1 rok temu .

Popraw to pytanie

Tło

Zauważyłem, że Android obsługuje teraz jakiś rodzaj rysunku wektorowego, poprzez klasę o nazwie "VectorDrawable" (a także AnimatedVectorDrawable, BTW). Znalazłem o tym patrząc na to, co nowego na Android-Studio.

Zastanawiam się, czy to byłby koniec konieczności umieszczania wielu plików w wielu folderach (mdpi, hdpi, xhdpi, itp.). Byłoby to świetne i mogłoby zminimalizować rozmiary aplikacji w niektórych przypadkach.

Pytania

Chciałbym zadać kilka pytań dotyczących tej nowej klasy:

  1. Czy można go używać w starszym Androidzie wersje, może przez Bibliotekę nawet biblioteki wsparcia Google?

  2. Nie wiem jak to działa, ale czy Lollipop radzi sobie z plikami SVG? Czy można zrobić coś, co jest osiągalne na plikach SVG?

  3. Czy istnieje jakaś próbka / samouczek / film z jego używania, inna niż dokumentacja, którą znalazłem?

Author: Zoe, 2014-10-24

9 answers

Aktualizacja na Marzec 2016

By Android Support Library 23.2.1 update, Obsługa rysunków wektorowych i animowanych rysunków wektorowych. (Możesz również użyć latestone do tego samego)

Proszę zaktualizować wersję biblioteki w pliku gradle.

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

Rysunki wektorowe pozwalają zastąpić wiele zasobów png pojedynczą grafiką wektorową, zdefiniowaną w XML. podczas gdy wcześniej ograniczano się do lizaków i urządzeń wyższych , ZARÓWNO VectorDrawable, jak i AnimatedVectorDrawable są teraz dostępne w dwóch nowych bibliotekach wsparcia support-vector-drawable i animated-vector-drawable. nowy atrybut app:srcCompat do rysunków wektorów odniesienia .

Sprawdź źródło na github z przykładowymi przykładami .

Zmiany w bibliotece appcompat v7:

Przywrócono zależność od zasobów wektorowych, dzięki czemu programiści korzystający z biblioteki appcompat nie są zmuszeni do używania VectorDrawable i powiązanych z nią FLAG budowania.

 39
Author: Amit Vaghela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-01 13:27:09

Update 2 : włączają go ponownie w Bibliotece wsparcia 23.4.0:

Dla użytkowników AppCompat dodaliśmy opt-in API, aby ponownie włączyć rysowanie wektorów wsparcia z zasobów (zachowanie Znalezione w 23.2) za pomocą AppCompatDelegate.setCompatVectorFromResourcesEnabled ( true) - należy pamiętać, że nadal może to powodować problemy z wykorzystaniem pamięci i problemy z aktualizacją instancji konfiguracji, dlatego jest domyślnie wyłączona.

Sprawdź to 23.4.0 dostępny teraz

Update: to nie działa od wersji 23.3.0 Sprawdź tutaj aby uzyskać szczegóły. Proxy drawables nie działa. app:srcCompat i setImageResource() działają jednak.


Obsługa rysowania wektorowego jest dostępna z biblioteki wsparcia w wersji 23.2 i nowszej. Jednak, aby prawidłowo korzystać z tych drawables, muszą być wymienione pośrednio.

Pierwszym krokiem {[8] } będzie wybranie wersji AppCompat.

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

Second enable Vector Drawable wsparcie. Jeśli używasz wtyczki Gradle, 2.0 +

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
}

Inaczej

android {  
   defaultConfig {  
     generatedDensities = []  
   }  

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

Po Trzecie , zapoznaj się z połączoną odpowiedzią .

 14
Author: razzledazzle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:26

Możesz wypróbować tę bibliotekę wsparcia . Obsługuje vectordrawable i AnimatedVectorDrawable wprowadzone w Lollipop z pełną kompatybilnością wsteczną.

 12
Author: V_J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-19 17:23:19

Aby uzupełnić niektóre odpowiedzi tutaj: tak, możesz uzyskać wsparcie dla vectordrawables pre-Lollipop , przynajmniej częściowe.

Jak częściowy? To zależy - zrobiłem ten diagram do pomocy (ważny dla biblioteki wsparcia 23.4.0 do - co najmniej - 25.1.0).

VectorDrawable cheatsheet

 8
Author: David Ferrand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-25 17:12:29

Niestety w tej chwili vectordrawable i AnimatedVectorDrawable nie są dostępne w bibliotece wsparcia. Ale aby skorzystać z tej funkcji w wersjach Pre-Lollipop, możesz użyć nieoficjalnego backportu o nazwie MrVector.

MrVector jest dostępny w Github i będzie obsługiwał Androida w wersji 7+.

Z oficjalnego Readme

Aby dodać zależność MrVector dodaj następującą linię do swojej kompilacji.gradle dependencies block.

compile 'com.telly:mrvector:0.2.0'

To tworzenie drawable z wektora XML,

Drawable drawable = MrVector.inflate(getResources(), R.drawable.vector_android);
Mam nadzieję, że to pomoże.
 6
Author: gnuanu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-22 09:02:38

Jeśli używasz VectorDrawable, Android Studio automatycznie wygeneruje według plików PNG (na podstawie plików XML) dla wersji Pre-Lollipop.

Należy pamiętać, że te wygenerowane pliki PNG są uważane za BitmapDrawables zamiast VectorDrawables na urządzeniach z API poniżej 21 i dlatego nie mogą być animowane lub podobne na tych urządzeniach.

Patrz "zgodność wsteczna" dla dalszych szczegóły: http://android-developers.blogspot.co.at/2015/09/android-studio-14.html

 3
Author: Mehlyfication,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-21 10:06:19

Lollipop nie może obsługiwać plików SVG bez bibliotek stron trzecich.

Najlepszym rozwiązaniem jest BetterVectorDrawable lib wraz z konwerterem SVG na Vectordrawable .

BetterVectorDrawable jest implementacją VectorDrawable dla Androida 4.0 + z konfigurowalnym zachowaniem awaryjnym na Androidzie 5.0+.

SVG to Vectordrawable Converter jest konwerterem wsadowym obrazów SVG do plików zasobów XML Vectordrawable systemu Android. wersja Online

Linki wskazują na readmes, które dostarczają wystarczających informacji o tym, jak korzystać z lib i konwertera.

 3
Author: A-student,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-25 11:06:16

W tej chwili nie ma VectorDrawables w bibliotece wsparcia.

Funkystein ma rację -- VECTORDRAWABLE jest podobny do SVG, tylko obsługuje funkcje rysowania wektorowego, które są najbardziej pożądane, aby android mógł skupić się na wydajności. na przykład pathData ma taki sam format jak ciąg " D " SVG.

 2
Author: George Mount,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-24 20:04:04

Wspaniałą wiadomością jest to, że Google wydała Android Support Library 23.2 Wsparcie wektorowych rysunków i animowanych rysunków wektorowych!

Ale dzięki idź do ludzi, którzy przenieśli tę bibliotekę przed Google!

Tutaj biblioteki AppCompat są świetne, mogą przynieść wiele nowych funkcji Androida z powrotem do znacznie wcześniejszych wersji. Z nowo zaimplementowana Klasa VectorDrawable, programiści mogą teraz używać vector obrazy z powrotem do API 7 (Android 2.1 Eclair). Animowane wektory są nieco bardziej ograniczone, idąc tylko tak daleko, jak API 11 (Android 3.0 Honeycomb), ale nadal obejmuje ponad 97% urządzenia w aktywnym użyciu dzisiaj

Instrukcja użycia:

Refer "age-of-the-vectors" by @ chrisbanes

 1
Author: LOG_TAG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-15 14:43:35