2016-12-12 52 views
9

Chcę ustawić niektóre vectorDrawables na ImageView w Android Studio.Jak programowo ustawić VectorDrawable jako obraz dla ImageView

Mogę łatwo ustawić png i jpg do rysowania, ale kiedy chcę ustawić VectorDrawable, to nie działa na widok obrazu.

img.setImageResource(R.drawable.ic_home); 

ic_home jest VectorDrawable i ten kod nie działa.

+1

przeczytaj https://blog.stylingandroid.com/vectordrawables-part-1/ –

+0

Odpowiedziałem tutaj, może to pomóc. możesz teraz zmienić rysowanie wektorowe. http://stackoverflow.com/a/42281780/4517450 –

Odpowiedz

12

Zgodnie z urzędnikiem android developer blog, żadnych zmian metody setImageResource() w środowisku wykonawczym dla vectorDrawables.

Jeśli zmieniasz kanału alfa w czasie wykonywania, będziesz mógł korzystać z metody samo setImageResource() jak dotychczas - nie ma zmian. Korzystanie z AppCompat i aplikacji: srcCompat to najbardziej niezawodny sposób na integrację wektorów do aplikacji .

Aby uzyskać więcej informacji, zapoznaj się z tym fajnym artykułem AppCompat — Age of the vectors autorstwa Google Developera.

6

Jeśli obawiasz się zgodności wstecznej, powinieneś zamiast tego użyć widoku AppCompatImageView. przejrzyj poniższy kod.

<android.support.v7.widget.AppCompatImageView 
    android:id="@+id/iv_about" 
    android:layout_width="150dp" 
    android:layout_height="150dp" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    /> 

java

AppCompatImageView image = (AppCompatImageView) findViewById(R.id.iv_about); 
image.setImageResource(); 

I będzie służyć perspektywę app:srcCompat.

+2

Nie ma takiej potrzeby, zgodnie z dokumentacją "To będzie automatycznie używane, gdy korzystasz z ImageView w twoich układach, a aktywność/okno najwyższego poziomu zapewnia appcompat. Powinieneś tylko ręcznie używać tej klasy podczas pisania niestandardowych widoków. " Możesz więc używać tylko ImageView, chyba że je rozszerzasz. – Adrian

+0

@ user924 masz rację. –

+0

@ user924 Nie określiłem, że można używać ImageView, o ile działanie rozszerza AppCompatActivity. Jeśli twój nie, to tak jak powiedziałeś. – Adrian

20

Jeśli chcesz korzystać z kanału alfa wektor (mniejsza lub większa niż API 21) po prostu wykonaj następujące czynności:

Ustaw obraz programowo (na przykład w swojej działalności):

imageView.setImageResource(R.drawable.ic_left_arrow_blue); 

lub XML:

app:srcCompat="@drawable/your_vector_name" 

W swojej aplikacji build.gradle trzeba podać:

android { 
    defaultConfig { 
     vectorDrawables.useSupportLibrary = true 
    } 
} 

A dla wektorów nośnych za mniej niż 21 API, dodać następujące onCreate:

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 
+3

nadal nie działa dla KitKat, tylko dla> = 5.1 działa poprawnie z 'setImageResource' – user924

+0

dla KitKat to działało tylko https://stackoverflow.com/a/35918375/7767664 – user924

1

miałem wektor w widoku recyklera używałem img.setImageResource (R.drawable.ic_home) który nie działał prawidłowo, jak niektóre inne obrazy powstają w niektórych element widoku recyklingu następnie użyłem img.setImageDrawable (activity.getResources(). getDrawable (R.drawable.ic_home)) to działało.

0

Zastosowanie android.support.v7.widget.AppCompatImageButton, android.support.v7.widget.AppCompatImageView, android.support.v7.widget.AppCompatTextView zamiast ImageButton, ImageView itp jeśli typ wektor obraz jest używany.

Głównie do widoków niestandardowych.