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

wer112

Top Contributor
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.
 
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...
 
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.

 
Zuletzt bearbeitet:
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.
 
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.
 
Wäre es nicht einfach, die jeweiligen Bilder bereit zu stellen und dann das Bild zu tauschen? Also z.B. mittels setImageResource.
 
Vektor Grafiken lassen sich doch auch im Studio mit dem Asset Editor bearbeiten und neu speichern.
oder benutze ein anderes Tool dafür.

 
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..):

Java:
  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 😉
 
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?
 
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
 
das ist ja ein Daumen hoch

Java:
<?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?
 

Zurück
Oben