2015-07-13 27 views
5

stworzyłem grafikę SVG wektor (z wykorzystaniem CorelDraw X7), który wygląda tak:Android VectorDrawable nie pojawia się w układzie

enter image description here

Następnie użyłem svg2android przekonwertować go do formatu VectorDrawable. Jednak, gdy próbuję użyć go w układzie, nie wydaje:

enter image description here

Jak widać, nie ma innego wektora odkształcalne tuż obok niego, że działa dobrze (tak svg2android i Android Studio działa dobrze).

To xml rzeczywistego rozciągliwej:

<?xml version="1.0" encoding="utf-8"?> 
<vector xmlns:android="http://schemas.android.com/apk/res/android" 
android:width="24dp" 
android:height="24dp" 
android:viewportWidth="24" 
android:viewportHeight="24"> 
<path 
    android:fillColor="#000000" 
android:pathData="M 1382,680 c 107,0 194,112 194,251 0,138 -87,250  -194,250 -2,0 -3,0 -5,0 -17,98 
-85,219 -230,219 l 0,77 c 0,28 235,1 235,45 l 0,55 -556,0 0,-55 c 0,-59 235,-11 
235,-45 l 0,-77 c -125,0 -211,-106 -230,-219 -1,0 -3,0 -5,0 -107,0 -195,-112 
-195,-250 0,-139 88,-251 195,-251 l 0,0 0,-48 556,0 0,48 z m -555,413 -1,-325 c 
0,0 0,0 0,0 -70,0 -126,73 -126,163 0,89 56,162 126,162 0,0 1,0 1,0 z m 555,-325 
0,325 c 70,0 126,-73 126,-162 0,-90 -56,-163 -126,-163 z" /> 
</vector> 

Jedyną rzeczą, którą zauważysz różnią się między kodu tego pliku i kod innych, plików roboczych, jest to, że niektóre wartości w tym pliku wyglądają negatywnie, w porównaniu do plików roboczych, gdzie wszystkie są pozytywne.

Co robię źle?

+2

przeczytać o 'android: viewportWidth' &' android: viewportHeight ', zmień je na, na przykład, 2400 – pskink

Odpowiedz

11

Współrzędne punktów na ścieżce są zbyt duże dla podanych viewportWidth i viewportHeight.

Obwiednia ścieżka to:

x:  631 
y:  632 
width: 945 
height: 945 

Ale ustawienia rzutni są w zasadzie mówi Android, który jest:

x:  0 
y:  0 
width: 24 
height: 24 

Więc kształt będzie wyciągnąć daleko skraju swoje obszar ikon.

Istnieje kilka sposobów na ręczne naprawienie tego, ale lepiej byłoby dopasować plik CorelDraw tak, aby grafika znajdowała się w lewym górnym rogu strony. Następnie upewnij się, że zapisany plik SVG ma numer viewBox. Jest to viewBox, którego svg2android użyje do obliczenia viewportWidth i viewportHeight.

Jeśli nie możesz sprawić, aby CorelDraw generował widok, zaprojektuj ikony na stronie o stałym rozmiarze (np. 100px x 100px). Wtedy powinieneś być w stanie uzyskać działający SVG, ręcznie dodając widok.

<svg ... viewBox="0 0 100 100" ...> 

Uwaga: Przeprowadzam tutaj pewne wykształcone zgadywanie, ponieważ nie mam programu CorelDraw do przetestowania.

W międzyczasie, tutaj jest ręcznie manipulowane wersję pliku, który myślę, że powinno działać (nie byli to sprawdzone):

<?xml version="1.0" encoding="utf-8"?> 
<vector xmlns:android="http://schemas.android.com/apk/res/android" 
android:width="24dp" 
android:height="24dp" 
android:viewportWidth="945" 
android:viewportHeight="945"> 

<group android:translateX="-631" android:translateY="-632"> 
<path 
    android:fillColor="#000000" 
android:pathData="M 1382,680 c 107,0 194,112 194,251 0,138 -87,250  -194,250 -2,0 -3,0 -5,0 -17,98 
-85,219 -230,219 l 0,77 c 0,28 235,1 235,45 l 0,55 -556,0 0,-55 c 0,-59 235,-11 
235,-45 l 0,-77 c -125,0 -211,-106 -230,-219 -1,0 -3,0 -5,0 -107,0 -195,-112 
-195,-250 0,-139 88,-251 195,-251 l 0,0 0,-48 556,0 0,48 z m -555,413 -1,-325 c 
0,0 0,0 0,0 -70,0 -126,73 -126,163 0,89 56,162 126,162 0,0 1,0 1,0 z m 555,-325 
0,325 c 70,0 126,-73 126,-162 0,-90 -56,-163 -126,-163 z" /> 
</group> 
</vector> 
+2

Dziękuję za tę cudowną odpowiedź! –

Powiązane problemy