Zaakceptowana odpowiedź jest nieprawidłowa na dzień 5.10.12
Brian Webster
Odpowiedzi:
56
Najbardziej kompletna odpowiedź brzmi:
Domyślna przeglądarka systemu Android 2.x nie obsługuje natywnie formatu SVG.
Domyślne przeglądarki systemu Android 3+ obsługują format SVG.
Aby dodać obsługę SVG do wersji 2.x platformy, masz dwie podstawowe możliwości:
Zainstaluj bardziej wydajną przeglądarkę (np. Firefox lub Opera Mobile - obie obsługują SVG)
Użyj wypełnienia JavaScript, który może analizować SVG i renderować go na kanwie HTML5
Pierwsza opcja jest w porządku, jeśli próbujesz sprawić, by SVG działało do użytku osobistego lub ograniczonej (kontrolowanej) grupy użytkowników. Nie jest to świetna opcja, jeśli chcesz używać SVG do kierowania na dużą, niekontrolowaną bazę użytkowników.
W późniejszym przypadku chcesz użyć wypełnienia. Obecnie dostępnych jest wiele bibliotek JavaScript, które mogą przetwarzać SVG i renderować na płótnie. Oto dwa przykłady:
Witam, chciałbym wiedzieć w przypadku ImageView, czy mogę zmienić kolor tego środowiska uruchomieniowego obrazu svg?
Shreyash Mahajan
22
Dostępna jest nowa biblioteka open source, która obsługuje ładowanie i rysowanie plików SVG Basic 1.1: https://github.com/pents90/svg-android . Wydajność jest dobra, ponieważ rzeczywisty rysunek jest obsługiwany natywnie przez obiekt android.graphics.Picture.
Aby nie przegapić, dodam tutaj komentarz (jak wspomniano w odpowiedzi @ Todda) Android 3+ obsługuje SVG. Dlatego programiści nie muszą martwić się o biblioteki, jeśli nie martwią się o starsze urządzenia z Androidem.
monotasker
9
W mojej odpowiedzi mam na myśli bibliotekę, która umożliwia programistom ładowanie i renderowanie plików SVG w ich aplikacjach. Android 3+ dodaje obsługę SVG w przeglądarce, ale nie ma obsługi SVG w swoim API dla programistów.
pensy 90
Ten niestety nie działał dla mnie z Androidem 4.3. Przykładowy obraz jest pusty. Używam dokładnego kodu, który znajduje się na stronie samouczka na Wiki.
Jest nowa biblioteka (w fazie rozwoju) androidsvg, która pozwala na włączanie obrazów svg bezpośrednio do projektów. Ma tę zaletę, że definiuje, SVGImageViewktóry pozwala na włączenie svg bezpośrednio do XML układu.
Ta biblioteka svg faktycznie działa. svg-android i jego forks nie zastosowały stylów / css, które zdefiniowałem w grupie dla dzieci grupy. Ten ma. Dziękuję Ci.
Właśnie wyrzuciłem repozytorium Github i przykładowe repozytorium dla mojej własnej biblioteki TPSVG, którą pierwotnie stworzyłem specjalnie dla mojej aplikacji.
Wiem, że moje rozwiązanie jest nieco hardcore'owe, ale działa świetnie, nie wymaga żadnych zewnętrznych bibliotek (przynajmniej nie w twoim ostatecznym kodzie) i jest niezwykle szybkie.
1) Po prostu weź istniejącą bibliotekę ładującą SVG, taką jak na przykład svg-android-2 (która jest rozwidleniem svg-android wspomnianym w innej odpowiedzi, tylko z większą liczbą funkcji i poprawek błędów): https://code.google.com / p / svg-android-2 /
2) Napisz prostą aplikację, która nie zrobi nic poza ładowaniem i wyświetlaniem obrazu SVG.
3) Zmodyfikuj bibliotekę ładującą SVG, aby drukowała kod Java, który tworzy klasę Picture, lub zapisuje go w zmiennej String.
4) Skopiuj i wklej uzyskany w ten sposób kod Java do aplikacji, którą piszesz.
podczas korzystania z AppCompat z ImageView (lub podklas, takich jak ImageButton i FloatingActionButton), będziesz mógł użyć nowego atrybutu app: srcCompat do odwoływania się do rysunków wektorowych (a także innych elementów rysunkowych dostępnych dla android: src):
Począwszy od biblioteki obsługi systemu Android 23.3.0, elementy rysunkowe wektorów wsparcia można ładować tylko za pośrednictwem aplikacji: srcCompat lub setImageResource ()
Odpowiedzi:
Najbardziej kompletna odpowiedź brzmi:
Aby dodać obsługę SVG do wersji 2.x platformy, masz dwie podstawowe możliwości:
Pierwsza opcja jest w porządku, jeśli próbujesz sprawić, by SVG działało do użytku osobistego lub ograniczonej (kontrolowanej) grupy użytkowników. Nie jest to świetna opcja, jeśli chcesz używać SVG do kierowania na dużą, niekontrolowaną bazę użytkowników.
W późniejszym przypadku chcesz użyć wypełnienia. Obecnie dostępnych jest wiele bibliotek JavaScript, które mogą przetwarzać SVG i renderować na płótnie. Oto dwa przykłady:
Korzystając z polyfill, możesz renderować swoje pliki SVG w kanatach we wszystkich wersjach Androida 2.x.
Aby uzyskać pełniejszy przykład tego podejścia, możesz odwołać się do tego wpisu na blogu, w którym omówiono użycie polyfill canvg do tworzenia wykresów DataViz Kendo UI (opartych na SVG) w systemie Android 2.x. Mam nadzieję, że to pomoże!
źródło
Dostępna jest nowa biblioteka open source, która obsługuje ładowanie i rysowanie plików SVG Basic 1.1: https://github.com/pents90/svg-android . Wydajność jest dobra, ponieważ rzeczywisty rysunek jest obsługiwany natywnie przez obiekt android.graphics.Picture.
źródło
Obecnie niektórzy ludzie, w tym ja, pracują nad tym samodzielnie.
Możesz znaleźć działające rozwiązanie w tych artykułach:
Android. ImageView z obsługą SVG.
Android ImageView i Drawable z obsługą SVG
źródło
Jest nowa biblioteka (w fazie rozwoju) androidsvg, która pozwala na włączanie obrazów svg bezpośrednio do projektów. Ma tę zaletę, że definiuje,
SVGImageView
który pozwala na włączenie svg bezpośrednio do XML układu.Wreszcie, dołączanie svg do Androida jest proste.
Więcej szczegółów: wpis dotyczący przepełnienia stosu
źródło
Android obsługuje rysunki wektorowe: https://developer.android.com/reference/android/graphics/drawable/VectorDrawable.html
I istnieje Android SVG to VectorDrawable Converter: http://inloop.github.io/svg2android/
źródło
Rzuciłem okiem na https://code.google.com/p/androidsvg/ . Do tej pory wyświetlono wszystkie pliki SVG, które wrzuciłem. Wygląda obiecująco.
źródło
Właśnie wyrzuciłem repozytorium Github i przykładowe repozytorium dla mojej własnej biblioteki TPSVG, którą pierwotnie stworzyłem specjalnie dla mojej aplikacji.
https://github.com/TrevorPage/TPSVG_Android_SVG_Library
https://github.com/TrevorPage/TPSVG_Example1
źródło
Wiem, że moje rozwiązanie jest nieco hardcore'owe, ale działa świetnie, nie wymaga żadnych zewnętrznych bibliotek (przynajmniej nie w twoim ostatecznym kodzie) i jest niezwykle szybkie.
1) Po prostu weź istniejącą bibliotekę ładującą SVG, taką jak na przykład svg-android-2 (która jest rozwidleniem svg-android wspomnianym w innej odpowiedzi, tylko z większą liczbą funkcji i poprawek błędów): https://code.google.com / p / svg-android-2 /
2) Napisz prostą aplikację, która nie zrobi nic poza ładowaniem i wyświetlaniem obrazu SVG.
3) Zmodyfikuj bibliotekę ładującą SVG, aby drukowała kod Java, który tworzy klasę Picture, lub zapisuje go w zmiennej String.
4) Skopiuj i wklej uzyskany w ten sposób kod Java do aplikacji, którą piszesz.
Aby uzyskać więcej informacji na temat tej techniki i pobrać przykładowy kod źródłowy, przejdź do mojego bloga: http://androiddreamrevised.blogspot.it/2014/06/transforming-svg-images-into-android.html
Możesz pobrać działający przykład tej techniki z Google Play tutaj: https://play.google.com/store/apps/details?id=pl.bartoszwesolowski.svgtodrawablesample
Oto przykład komercyjnej aplikacji stworzonej tą techniką (mapa metra w Mediolanie): https://play.google.com/store/apps/details?id=pl.bartoszwesolowski.atmmetroplan
Zwróć uwagę, jak szybko mapa się ładuje i jak ładnie wygląda, nawet po powiększeniu.
źródło
Sprawdź wektor wsparcia do rysowania . Studio Android ma narzędzie do konwersji plików SVG do plików .XML.
podczas korzystania z AppCompat z ImageView (lub podklas, takich jak ImageButton i FloatingActionButton), będziesz mógł użyć nowego atrybutu app: srcCompat do odwoływania się do rysunków wektorowych (a także innych elementów rysunkowych dostępnych dla android: src):
Począwszy od biblioteki obsługi systemu Android 23.3.0, elementy rysunkowe wektorów wsparcia można ładować tylko za pośrednictwem aplikacji: srcCompat lub setImageResource ()
źródło
Firefox dla Androida obsługuje format SVG.
źródło
Opera Mobile na Androida obsługuje format svg, a Opera Mini obsługuje statyczne pliki svg.
źródło