Android SVG grafik rengini programatik olarak değiştirmek

Android'de vektörel grafik kullanıp, grafik rengini kod ile değiştirebilirsiniz. Bu sayede her renk için farklı grafik kullanmak gerekmeyecek.

Yapmak istediğim işlem şuydu:
- Bir klasör listesi ve listedeki klasör ikonları için renk seçebilmek.
- Tek bir vektörel grafik kullanmak.

* FontAwesome'a ait bir ikonu SVG formatlı olarak indirdim.


* Ardından Android Studio'ya drawable olarak aktarmak gerekiyordu. Fakat bu işlem için indirdiğim ikonun SVG formatı uyumsuz. Uygun formata dönüştürmek için..

* http://inloop.github.io/svg2android/ ( Chrome/Webkit tarayıcı ile ziyaret ediniz ). Buradan SVG'yi uyumlu olarak Sitesini Drawable XML formatına dönüştürdüm ve projeye dahil ettim.

* Layout içinde uygun şekilde kullanmak için, src olarak XML e dönüştürüp projeye eklemiş olduğum folder ikonunu ekledim. Altına tint olarak vermek istediğimiz rengi belirtebiliyoruz. Tabi sonradan bu rengi programatik olarak değiştirebiliyoruz.


* Buradaki layout'u ListView satırı olarak kullanıyorum. Her satırda ikon için farklı bir renk tanımlaması yapabileceğim. Kullandığım modelin adı Folder her folder modeline ait bir title ve color verisi mevcut. Koddaki folder.getColor() mevcut klasöre ait hex renk kodu. Örnek: #FF0000

Color.parseColor( folder.getColor() ) ile hex renk kodunu int renk koduna dönüştürüyoruz. Ardından setColorFilter ile android.graphics.PorterDuff.Mode.SRC_IN modunu kullanarak grafiğin rengini değiştiriyoruz.

holder.folder.setColorFilter(Color.parseColor( folder.getColor() ), android.graphics.PorterDuff.Mode.SRC_IN);

Çalışır haline aşağıdan bakabilirsiniz. ABCOptik Okuyucu projesinden de bakabilirsiniz. Kullanılan renk seçme kütüphanesi: https://github.com/kristiyanP/colorpicker

+3
Yorum ekle

Yorum ekle

    • winksmile
      laughing
      angry
Okunamayan kodu yenilemek için resmin üstüne tıklayınız