2014-10-29 33 views
7

Wiem, że korzystając z biblioteki stron trzecich, możliwe jest użycie obrazu SVG w systemie Android. Biblioteka jak: svg-androidDynamicznie zmieniaj kolor obrazu SVG w Androidzie

Kod załadować SVG obraz jest jak poniżej:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // Create a new ImageView 
    ImageView imageView = new ImageView(this); 
    // Set the background color to white 
    imageView.setBackgroundColor(Color.WHITE); 
    // Parse the SVG file from the resource 
    SVG svg = SVGParser.getSVGFromResource(getResources(), R.raw.android); 
    // Get a drawable from the parsed SVG and set it as the drawable for the ImageView 
    imageView.setImageDrawable(svg.createPictureDrawable()); 
    // Set the ImageView as the content view for the Activity 
    setContentView(imageView); 
} 

To działa dobrze. Jestem w stanie zobaczyć obraz. Ale teraz chcę zmienić kolor obrazu svg w czasie wykonywania. Dla tego próbowałem kodu poniżej, jak wspomniano w tym samym opisie projektu.

// 0xFF9FBF3B is the hex code for the existing Android green, 0xFF1756c9 is the new blue color 
    SVG svg = SVGParser.getSVGFromResource(getResources(), R.raw.android, 0xFF9FBF3B, 0xFF1756c9); 

Ale z tym nie jestem w stanie zobaczyć zmiany w kolorze. Chciałbym więc wiedzieć, jak można dynamicznie zmienić kolor w pliku Java.

+1

Upewnij się ten kolor '0xFF9FBF3B' istnieje w SVG (wystarczy otworzyć go w edytorze tekstu i szukać tej wartości). Należy pamiętać, że zmiana koloru ma miejsce ** podczas ładowania pliku **, a nie dynamicznie. Wystarczy więc ponownie załadować plik, aby zastosować zmianę koloru. –

Odpowiedz

9

Dostałem się, gdzie jest problem. Problem dotyczy kodu koloru używanego w pliku SVG. To nie dokładnie 0xFF9FBF3B ale # 9FBF3B
Ale podczas kodu java trzeba napisać o wartości ARGB (np 0xFF9FBF3B). Zaktualizowałem go i teraz działa dobrze. Mogę zmienić kolor pliku svg tym samym kodem.

Mam nadzieję, że pomoże to również innym osobom zidentyfikować rzeczywisty przypadek podczas zmiany koloru obrazu SVG w czasie wykonywania.

16

Wiem, że jest późno, ale miałem również ten problem i udało mi się naprawić ten problem za pomocą metody setColorFilter(int color, PorterDuff.Mode mode).

Przykład:

imageView.setColorFilter(getResources().getColor(android.R.color.black), PorterDuff.Mode.SRC_IN); 
Powiązane problemy