2016-01-16 15 views
49

Próbuję użyć VectorDrawable w LayerList bez skalowania wektora. NpJak wyśrodkować wektor do pobrania na liście warstw bez skalowania

<layer-list> 
    <item android:drawable="@color/grid_item_activated"/> 
    <item android:gravity="center" android:drawable="@drawable/ic_check_white_48dp"/> 
</layer-list> 

odkształcalne ic_check_white_48dp ID zdefiniowany jako:

<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> 

uzyskania żądanego efektu jest ikona sprawdzenie się w środku rozciągliwej warstwy bez skalowania. Problem polega na tym, że powyższa lista warstw powoduje skalowanie ikony kontrolki w celu dopasowania jej do rozmiaru warstwy.

I może wytworzenia pożądanego efektu, jeśli wymienić rozciągliwej wektor z PNG dla każdej gęstości i modyfikowania warstwy-lista w następujący sposób:

<layer-list> 
    <item android:drawable="@color/grid_item_activated"/> 
    <item> 
     <bitmap android:gravity="center" android:src="@drawable/ic_check_white_48dp"/> 
    </item> 
</layer-list> 

jest jakiś sposób można to zrobić przy użyciu VectorDrawable ?

+7

Wygląda na to, że może to być po prostu błąd w API 21/22. Właśnie testowałem urządzenie z interfejsem API 23, a wyciągnięcie wektorów było prawidłowo wyśrodkowane. – ashughes

+0

Powinieneś odpowiedzieć na własne pytanie i zaakceptować je. W ten sposób jest bardziej widoczny i pytanie nie pojawia się jako bez odpowiedzi. –

+1

Nie odpowiedziałem na moje pytanie, ponieważ nie mam jeszcze odpowiedzi na pytanie, co zrobić z API 21/22. Moim tymczasowym rozwiązaniem było użycie PNG zamiast wektorów. Mając nadzieję, że nadal uda się opracować sposób działania wektorów. – ashughes

Odpowiedz

8

Wpadłem na ten sam problem, próbując wyśrodkować rysunki wektorów na liście warstw.

mam obejście, to nie jest dokładnie to samo, ale to działa, trzeba ustawić rozmiar dla całego rozciągliwej i dodać dopełnienie do elementu wektora:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape> 
      <size android:height="120dp" android:width="120dp"/> 
      <solid android:color="@color/grid_item_activated"/> 
     </shape> 
    </item> 
    <item android:top="24dp" 
      android:bottom="24dp" 
      android:left="24dp" 
      android:right="24dp" 
      android:drawable="@drawable/ic_check_white_48dp"/> 
</layer-list> 

wielkości kształtu powyżej zestawów rozmiar całego losowania, 120 dp w tym przykładzie, dopełnienie drugiego elementu, 24 dp w tym przykładzie, centralizuje obraz wektorowy.

Nie jest taka sama jak przy użyciu gravity="center" ale jego drogę roboczą przy użyciu wektorów API 21 i 22.

+1

Wygląda na to, że trzeba znać dokładny rozmiar losowania (w celu ustawienia rozmiaru kształtu), zamiast pozwalać, aby wypełniał całą przestrzeń, w której jest ustawiony, z zaznaczonym w środku znacznikiem wyboru. – ashughes

+0

możliwe jest, aby nie znać rozmiaru, ale nie można zmienić wypełnienia za pomocą tej metody, można warstwować jeden na drugim w widokach obrazu. Jak już wspomniałem, nie ma idealnego rozwiązania dla 'gravity =" center "' w API 21 i 22. –

9

zmaga się z tym samym problemem. Jedynym sposobem znalazłem to naprawić i uniknąć rozciągliwej skalować się było ustawić rozciągliwej rozmiar i wagę, aby go za pomocą wyrównać:

<layer-list> 
    <item android:drawable="@color/grid_item_activated"/> 
    <item 
     android:gravity="center" 
     android:width="48dp" 
     android:height="48dp" 
     android:drawable="@drawable/ic_check_white_48dp"/> 
</layer-list> 

Nadzieję, że to pomaga!

+13

To nie pomaga w API 21-22, ponieważ atrybut 'width' nie jest dostępny na tych poziomach API. W interfejsie API 23 nie są one potrzebne, ponieważ błąd został naprawiony, a losowanie nie jest już rozciągnięte. – WonderCsabo

+0

to już nie działa! –

Powiązane problemy