2012-05-04 23 views
7

Potrzebuję znaleźć sposób na zmianę koloru bitmapy w Androidzie. Muszę zastąpić/zmienić kolory owalnego obrazu płynnie w mojej aplikacji w zależności od wartości int. Potrzebuję czegoś takiego, jak myValue=5 niż zmienić kolor mojego obrazu na RED, a jeśli myValue=322 zmieni kolor na BLUE. Jedynym sposobem, który znaleźć można zrobić to używał pliku xml, który wygląda tak:Android zmienia kolor ImageView/Bitmapy

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval" android:padding="10dp"> 
<!-- you can use any color you want I used here gray color--> 
<solid android:color="#cccccc"/> 
    <corners 
    android:bottomRightRadius="10dp" 
    android:bottomLeftRadius="10dp" 
    android:topLeftRadius="10dp" 
    android:topRightRadius="10dp"/> 
</shape> 

a po tym, gdy myValue zmienia ustawienie mój zasób ImageView obrazu. Ale w ten sposób muszę utworzyć 35 różnych plików xml ... co nie wydaje mi się dobrym pomysłem.

Czy ktoś może zaproponować lepsze rozwiązanie?

Odpowiedz

20

To jest jak I rozwiązać ten problem:

  1. zadeklarować ImageView z src="@drawable/button"
  2. Tworzenie Drawable i ustawić ColorFilter do niego i po które używają go jako src do zadeklarowanego ImageView w następujący sposób:

>

Drawable myIcon = getResources().getDrawable(R.drawable.button); 
ColorFilter filter = new LightingColorFilter(Color.BLUE, Color.BLUE); 
myIcon.setColorFilter(filter); 
color.setImageDrawable(myIcon); 
+0

Czy możesz również wspomnieć, jak to zrobić w xml, jeśli jest to możliwe? – Bhargav

+4

Nvm Znalazłem to, muszę użyć atrybutu 'android: tint' dla' widoku obrazu' – Bhargav

1

należy to.

Drawable myIcon = getResources().getDrawable(R.drawable.button); 
ColorFilter filter = new LightingColorFilter(Color.BLACK, Color.BLACK); 
myIcon.setColorFilter(filter); 
16

To rozwiązanie nie działa zbyt dobrze dla mnie. W niektórych obrazach ostateczny kolor był nieprawidłowy. używam tego rozwiązania Zamiast:

Drawable myIcon = getResources().getDrawable(R.drawable.your_image); 
myIcon.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP); 
((ImageView)findViewById(R.id.view_to_change)).setImageDrawable(myIcon); 
+0

Pracowałem ... dziękuję tonę! – cdkn7

+0

Dzięki temu działa jak urok :) – Tony

3
getResources().getDrawable(R.drawable.button); 

jest teraz przestarzała. Może to również zrobić w ten sposób:

((ImageView) findViewById(R.id.my_icon)) 
    .setColorFilter(new LightingColorFilter(Color.BLUE, Color.BLUE)); 
Powiązane problemy