# Pixel Farbe in eine andere Farbe ändern im ImageView von ein Icon



## wer112 (16. Sep 2021)

Die Nutzer entscheiden ja, welche App reinkommt bzw. rausfliegt. Damit keine Schrott Apps reingelangt. 
Bei mir gibt es keine Sterne, sondern nur Daumen hoch oder Daumenrunter +1/ -1 (Prozent ausrechnen, wie viele posetive Daumen und wie viele Negative Daumen gibt)

Wenn man die App nicht bewertet hat, sind beide Daumen schwarz. Drückt man jetzt auf den Daumen hoch wird der Schwarze Daumen zu einem Grünen Daumen und der Daumen nach unten bleibt Schwarz. Drück man den Daumen nach Unten wird dieser Rot und der Grüne Daumen bzw. Schwarzer Daumen bleib bzw. wird Schwarz.
Damit kann der Nutzer immer sehen, was er gewählt hat.

Leider habe ich einen Ansatz ausprobiert, der nicht funktioniert hat. Also um Farbe zu setzen, sowas: 0x000000. Wenn ich das so hatte, waren die Daumen weg.
Ich habe danach die Farbe geparst und die Daumen Sind wieder Schwarz. Leider verändern diese nicht die Farbe.
Vielleicht habe ich einen falchen Code verwendet. 


[CODE lang="java" title="Der Code Ausschnitt"] like = (ImageView)fragmentlayout_app_fragment.findViewById(R.id.image_like);
        dislike = (ImageView)fragmentlayout_app_fragment.findViewById(R.id.image_dislike);

        Bewertung();

        like.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                bewertung.equals(1);

                Bewertung();
            }
        });

        dislike.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                bewertung.equals(2);


                Bewertung();
            }
        });



        /*

        AppDatenImport();

         */



                IsAppInstall();








        return  fragmentlayout_app_fragment;
    }

    private void Bewertung() {

        switch (bewertung){
            case 0:
                like.setColorFilter(Color.parseColor("#000000"), PorterDuff.Mode.MULTIPLY);
                dislike.setColorFilter(Color.parseColor("#000000"), PorterDuff.Mode.MULTIPLY);
                break;

            case 1:

                like.setColorFilter(Color.parseColor("#00875f"), PorterDuff.Mode.MULTIPLY);
                dislike.setColorFilter(Color.parseColor("#000000"), PorterDuff.Mode.MULTIPLY);

                break;

            case 2:

                like.setColorFilter(Color.parseColor("#000000"), PorterDuff.Mode.MULTIPLY);
                dislike.setColorFilter(Color.parseColor("#ff0000"), PorterDuff.Mode.MULTIPLY);

                break;
        }

    }
[/CODE]


Ich habe ganz oben einen Integer gestetzt mit einer 0 oder eine andere Zahl, um zu sehen, obs funktioniert.
Da das mit den Zahl setzen nicht wusste, obs funktioniert hatte.

Hat am Anfang das gesagt: bewertung = 1;

Also werde ich das irgendwann erneut ausprobiert, sobald die Start Farbe stimmt....
*
Als Hat jemand eine Idee, wie ich die Farbe eines Icon, dass ich im Image View verwende das Schwarz in Grün, Rot oder Schwarz ändern kann?*

Sonst müsste ich den Hintergrund ändern, was s..... aussieht.


----------



## Jw456 (16. Sep 2021)

Benutze doch verschiedene Icons in allen Farben die du brauchst.

setColorFilter ist sowieso deprecated seit API 29
​


----------



## wer112 (16. Sep 2021)

Jw456 hat gesagt.:


> Benutze doch verschiedene Icons in allen Farben die du brauchst.
> 
> setColorFilter ist sowieso deprecated seit API 29
> ​


Das problem ist, dass ich nicht mehr in die Vektor Images rein komme und somit größeres Problem habe. Gibt es ein anderen Weg? Wie ich die Pixel ändern kann ? (Gibts bestimmt ein ersetzen Befehl...)

Leider gibt es nur die Möglichkeit Schwarz oder Weiß. Deswegen müsste ich die Pixel ja ändern können...


----------



## wer112 (16. Sep 2021)

Jw456 hat gesagt.:


> Benutze doch verschiedene Icons in allen Farben die du brauchst.
> 
> setColorFilter ist sowieso deprecated seit API 29
> ​


PS.: Auf API 28 funktioniert das auch nicht!


----------



## Jw456 (16. Sep 2021)

Was du willst wird so auch nicht gehen.
Was macht die Methode  sie färbt  jedes Pixel im Drawable  mit den Farbton ein.
Es pass sozusagen die Farbtemperatur  an. Wie der Farbton  verrechnet wird, wird  mit dem zweiten Parameter bestimmt. Schaue in die doku welche es da gibt.
Eine Farbe durch eine andere ersetzen geht damit nicht. 
Das wirkt immer auf alle Pixel außer Transparent.



			https://developer.android.com/reference/android/graphics/PorterDuff.Mode


----------



## wer112 (16. Sep 2021)

Jw456 hat gesagt.:


> Was du willst wird so auch nicht gehen.
> Was macht die Methode  sie färbt  jedes Pixel im Drawable  mit den Farbton ein.
> Es pass sozusagen die Farbtemperatur  an. Wie der Farbton  verrechnet wird, wird  mit dem zweiten Parameter bestimmt. Schaue in die doku welche es da gibt.
> Eine Farbe durch eine andere ersetzen geht damit nicht.
> Das wirkt immer auf alle Pixel außer Transparent.


Und eine andere Methode, wo alle Schwarze Pixel gegen eine andere Farbe ersetzt werden? Sowas wäre ja ansicht möglich.


----------



## Jw456 (16. Sep 2021)

eine fertige methode dafür gibt es nicht. 
Aber hast  du dir mal angesehen was  MULTIPLY macht.

Ich würde 6 Drawable benutzen und die Sache ist gegessen.


----------



## kneitzel (16. Sep 2021)

Wäre es nicht einfach, die jeweiligen Bilder bereit zu stellen und dann das Bild zu tauschen? Also z.B. mittels setImageResource.


----------



## Jw456 (16. Sep 2021)

kneitzel hat gesagt.:


> Wäre es nicht einfach, die jeweiligen Bilder bereit zu stellen und dann das Bild zu tauschen? Also z.B. mittels setImageResource.


ist ja genau das was ich auch gesagt  habe


----------



## Jw456 (16. Sep 2021)

Vektor Grafiken lassen sich doch auch im Studio mit dem Asset Editor bearbeiten und neu speichern.
oder benutze ein anderes Tool dafür.









						Add multi-density vector graphics  |  Android Developers
					

Android Studio includes a tool called Vector Asset Studio that helps you add material icons and import Scalable Vector Graphic (SVG) and Adobe Photoshop Document (PSD) files into your project as vector drawable resources.




					developer.android.com


----------



## wer112 (16. Sep 2021)

kneitzel hat gesagt.:


> Wäre es nicht einfach, die jeweiligen Bilder bereit zu stellen und dann das Bild zu tauschen? Also z.B. mittels setImageResource.


Das habe ich jetzt auch so gemacht, ich habe einfach den like kopiert und ein _on rangehängt und das gleiche bei dislike. Ich habe dadrinnen die Farbe geändert. Ich versuche die App so klein wie nur möglich halten, denn niemand lädt den Playstore runter, wenn dieser mehrere GB Speicherplatz benötigt. 
Und Code ansicht brauch weniger Speicherplatz....

Hier der Farbwechsel App bewertungscode(Wird noch hinzugefügt, dass man die erst bewerten kann, sobald man die App mind. 1 x installiert hatte..):


```
like = (ImageView)fragmentlayout_app_fragment.findViewById(R.id.image_like);
        dislike = (ImageView)fragmentlayout_app_fragment.findViewById(R.id.image_dislike);



        SharedPreferences prefsbewertung = getActivity().getSharedPreferences("Bewertung", getActivity().MODE_PRIVATE);
        bewertung = prefsbewertung.getInt("bewertung", bewertung);




        Bewertung();

        like.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                bewertung = 1;
                SharedPreferences prefs = getActivity().getSharedPreferences("Bewertung", getActivity().MODE_PRIVATE);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putInt("bewertung" , bewertung);
                editor.apply();
                Toast.makeText(getActivity(), "Bewertung ist: " + bewertung, Toast.LENGTH_SHORT).show();

                Bewertung();
            }
        });

        dislike.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                bewertung = 2;

                SharedPreferences prefs = getActivity().getSharedPreferences("Bewertung", getActivity().MODE_PRIVATE);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putInt("bewertung" , bewertung);
                editor.apply();
                Toast.makeText(getActivity(), "Bewertung ist: " + bewertung, Toast.LENGTH_SHORT).show();

                Bewertung();
            }
        });



        /*
        
        AppDatenImport();
                
         */



                IsAppInstall();




        



        return  fragmentlayout_app_fragment;
    }

    private void Bewertung() {

        switch (bewertung){
            case 0:
                like.setImageResource(R.drawable.ic_like);
                dislike.setImageResource(R.drawable.ic_dislike);
                break;

            case 1:

                like.setImageResource(R.drawable.ic_like_on);
                dislike.setImageResource(R.drawable.ic_dislike);

                break;

            case 2:

                like.setImageResource(R.drawable.ic_like);
                dislike.setImageResource(R.drawable.ic_dislike_on);

                break;
        }

    }
```

Ps.: Man könnte ja die Pixel auslesen und die dann ändern, was aber sehr bestimmt für mich zu kompliziert sein würde 😉


----------



## wer112 (16. Sep 2021)

Jw456 hat gesagt.:


> Vektor Grafiken lassen sich doch auch im Studio mit dem Asset Editor bearbeiten und neu speichern.
> oder benutze ein anderes Tool dafür.
> 
> 
> ...


Leider ist dies nicht möglich. Sonst hätte ich ja das gemacht. Ich muss ja die Icons unter fonts.google.com runterladen, aber dort gibt es nur schwarz und weiß.

Welches lizensierte Tool kennst du von Google?


----------



## Jw456 (16. Sep 2021)

> wenn dieser mehrere GB Speicherplatz benötigt.
> Und Code ansicht brauch weniger Speicherplatz....


deine Drawable sind ja vektorgrafiken also brauchen nicht viel speicherplatz.



Wenn es keine fertigen Icons für dich gibt.
Dann erstelle selber Icons


----------



## Jw456 (16. Sep 2021)

Change the color of a Material icon in Android
					

Sometimes even easy things become tricky to solve, here is one of them, changing the color of the material design icons.




					medium.com


----------



## Jw456 (16. Sep 2021)

das ist ja ein Daumen hoch 


```
<?xml version="1.0"?>

-<vector android:tint="?attr/colorControlNormal" android:viewportHeight="24" android:viewportWidth="24" android:height="24dp" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">

<path android:pathData="M1,21h4L5,9L1,9v12zM23,10c0,-1.1 -0.9,-2 -2,-2h-6.31l0.95,-4.57 0.03,-0.32c0,-0.41 -0.17,-0.79 -0.44,-1.06L14.17,1 7.59,7.59C7.22,7.95 7,8.45 7,9v10c0,1.1 0.9,2 2,2h9c0.83,0 1.54,-0.5 1.84,-1.22l3.02,-7.05c0.09,-0.23 0.14,-0.47 0.14,-0.73v-2z" android:fillColor="@android:color/white"/>

</vector>
```

wo ist jetz das Problem die farbe zu ändern?


----------

