Pracuję nad aplikacją na Androida i mam rysownicę, którą ładuję z obrazu źródłowego. Na tym zdjęciu chciałbym przekonwertować wszystkie białe piksele na inny kolor, powiedzmy niebieski, a następnie buforować wynikowy obiekt do rysowania, aby móc go później użyć.
Powiedzmy na przykład, że mam plik PNG 20x20, który ma białe kółko pośrodku i że wszystko poza nim jest przezroczyste. Jak najlepiej zmienić to białe koło na niebieskie i zapisać wyniki w pamięci podręcznej? Czy odpowiedź zmienia się, jeśli chcę użyć tego obrazu źródłowego do utworzenia kilku nowych Drawables (np. Niebieski, czerwony, zielony, pomarańczowy itp.)?
Zgaduję, że chcę w jakiś sposób użyć ColorMatrix, ale nie jestem pewien, jak to zrobić.
android
android-drawable
Matt McMinn
źródło
źródło
/sillyandroid/src/main/java/me/angrybyte/sillyandroid/extras/Coloring.java
Odpowiedzi:
Myślę, że właściwie możesz po prostu użyć
Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY )
. Ustawiłoby to białe piksele na czerwone, ale nie sądzę, żeby wpłynęło to na przezroczyste piksele.Zobacz Drawable # setColorFilter
źródło
Drawable.mutate().setColorFilter( 0xffff0000, Mode.MULTIPLY)
więcej informacji: curious-creature.org/2009/05/02/drawable-mutationssetColorFilter
każdym razem, gdy korzystamy z ikon, zamiast selektorów o różnych odcieniach kolorów. Jest to jednak znacznie lepsze rozwiązanie niż bezpośrednia edycja plików PNG i posiadanie dodatkowych zasobów statycznych.SRC_IN
:myImage.getDrawable().mutate().setColorFilter(getResources().getColor(R.color.icon_grey), PorterDuff.Mode.SRC_IN);
Wypróbuj ten kod:
źródło
Wiem, że to pytanie było zadawane na długo przed Lollipopem, ale chciałbym dodać fajny sposób, aby to zrobić na Androidzie 5. +. Tworzysz rysunek XML, który odwołuje się do oryginalnego, i ustawia odcień w taki sposób:
źródło
Nowe wsparcie v4 przywraca odcień do interfejsu API 4.
możesz to zrobić w ten sposób
źródło
Jeśli masz rysunek, który ma jednolity kolor i chcesz go zmienić na inny, jednolity kolor, możesz użyć
ColorMatrixColorFilter
. Przejrzystość jest zachowana.źródło
int iColor = ContextCompat.getColor(context, R.color.primary);
.Używam również
ImageView
do ikon (naListView
ekranie ustawień lub). Ale myślę, że istnieje o wiele prostszy sposób na zrobienie tego.Użyj,
tint
aby zmienić nakładkę koloru na wybraną ikonę.W xml
działa dobrze, ponieważ pochodzi
AppCompat
źródło
Powinieneś to zrobić dla wszystkich interfejsów API:
źródło
ColorFilter filter = new LightingColorFilter(Color.BLACK, Color.LTGRAY);
. Zmieni kolor czarny na szary w rysunku.Udało mi się to zrobić za pomocą następującego kodu, który jest pobierany z działania (układ jest bardzo prosty, zawiera tylko ImageView i nie jest tutaj zamieszczany).
źródło
Możesz go rozwiązać za pomocą bibliotek kompatybilnych z Androidem. :)
źródło
mutate()
wywołanie jest wymagane, aby móc zmienić odcień drawable, bez zmiany wszystkich powiązań drawable z tym identyfikatorem zasobu.W swojej działalności możesz zabarwić zasoby obrazu PNG jednym kolorem:
Teraz, gdy używasz R..drawable. *, Powinien być zabarwiony pożądanym odcieniem. Jeśli potrzebujesz dodatkowych kolorów, powinieneś być w stanie .mutate () rysować.
źródło
Dzięki @sabadow
źródło
Jeśli masz zestaw do rysowania w ImageView, możesz to zrobić za pomocą 1 wkładki:
źródło
Sprawdź ten przykładowy kod „ ColorMatrixSample.java ”
Odpowiednie API jest dostępne tutaj :
źródło
Działa to ze wszystkim w tle:
Widok tekstu, przycisk ...
źródło
Ten fragment kodu działał dla mnie:
źródło
Istnieje tak wiele rozwiązań, ale nikt nie sugerował, że jeśli plik XML zasobu kolorów ma już kolor, możemy wybrać bezpośrednio z niego również, jak poniżej:
źródło
Krótki przykład zmiany koloru do rysowania według
isWorking
pola.Mój kształt xml:
Moja metoda zmiany:
Przykład użycia:
źródło
w pliku XML /res/values/color.xml
Kod Java
źródło
Za późno, ale na wypadek, gdyby ktoś tego potrzebował:
źródło
Działa z niektórymi prostymi rysowaniami. Użyłem go na prostym prostym jednolitym kolorze z zaokrąglonymi narożnikami i potrzebowałem zmienić ten kolor za pomocą różnych układów.
Spróbuj tego
źródło
To bardzo proste, gdy używasz biblioteki, aby to zrobić za Ciebie. Spróbuj tego bibliotekę
Możesz zadzwonić w ten sposób:
źródło