android - titel - title tag definition




Wie man Farbton für eine Bildansicht programmgesteuert in Android einstellt? (10)

@Hardik hat es richtig gemacht. Der andere Fehler in Ihrem Code ist, wenn Sie auf Ihre XML-definierte Farbe verweisen. Sie haben der setColorFilter Methode nur die ID setColorFilter , wenn Sie die ID zum setColorFilter der setColorFilter verwenden und die Ressource an die setColorFilter Methode übergeben setColorFilter . Überschreiben Sie Ihren ursprünglichen Code unten.

Wenn diese Zeile in Ihrer Aktivität enthalten ist:

imageView.setColorFilter(getResources().getColor(R.color.blue), android.graphics.PorterDuff.Mode.MULTIPLY);

Andernfalls müssen Sie auf Ihre Haupttätigkeit verweisen:

Activity main = ...
imageView.setColorFilter(main.getResources().getColor(R.color.blue), android.graphics.PorterDuff.Mode.MULTIPLY);

Beachten Sie, dass dies auch für die anderen Ressourcentypen gilt, z. B. Integer, Boole, Dimensionen usw. Außer für Zeichenfolge, für die Sie in Ihrer Aktivität direkt getString() können, ohne zuerst getResources() aufrufen zu getResources() (don Frag mich nicht warum.

Ansonsten sieht dein Code gut aus. (Obwohl ich die setColorFilter Methode nicht zu sehr untersucht habe ...)

Müssen Farbton für eine Bildansicht einstellen ... Ich verwende es auf folgende Weise:

imageView.setColorFilter(R.color.blue,android.graphics.PorterDuff.Mode.MULTIPLY);

Aber es ändert sich nicht ...


Ab Lollipop gibt es auch eine tint Methode für BitmapDrawables, die mit der neuen Palette-Klasse arbeitet:

public void setTintList (ColorStateList-Farbton)

und

Öffentlicher void setTintMode (PorterDuff.Mode tintMode)

In älteren Versionen von Android können Sie jetzt die DrawableCompat Bibliothek verwenden


Da die erste Antwort für mich nicht funktionierte:

//get ImageView
ImageView myImageView = (ImageView) findViewById(R.id.iv);

//colorid is the id of a color defined in values/colors.xml
myImageView.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.colorid)));

Dies scheint nur in API 21+ zu funktionieren, aber für mich war das kein Problem. Sie können ein ImageViewCompat verwenden, um dieses Problem zu beheben.

Ich hoffe, ich habe jedem geholfen :-)


Das hat für mich funktioniert

mImageView.setColorFilter(ContextCompat.getColor(getContext(), R.color.green_500));

Einfach und eine Zeile

imageView.setColorFilter(activity.getResources().getColor(R.color.your_color));

Ich habe festgestellt, dass wir den Farbselektor für den Farbton attr verwenden können:

mImageView.setEnabled(true);

xml:

 <ImageView
            android:id="@+id/image_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_arrowup"
            android:tint="@color/section_arrowup_color"
            />

section_arrowup_color.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/white" android:state_enabled="true"/>
    <item android:color="@android:color/black" android:state_enabled="false"/>
    <item android:color="@android:color/white"/>
</selector>

Nachdem ich alle Methoden ausprobiert habe und sie nicht für mich gearbeitet haben.

Ich bekomme die Lösung mit einem anderen PortDuff.MODE.

imgEstadoBillete.setColorFilter(context.getResources().getColor(R.color.green),PorterDuff.Mode.SRC_IN);

Sie können den Farbton ganz einfach im Code ändern über:

imageView.setColorFilter(Color.argb(255, 255, 255, 255)); // Weiße Tönung

Wenn Sie einen Farbton wünschen, dann

imageView.setColorFilter(ContextCompat.getColor(context, R.color.COLOR_YOUR_COLOR), android.graphics.PorterDuff.Mode.MULTIPLY);

Für Vektor Drawable

imageView.setColorFilter(ContextCompat.getColor(context, R.color.COLOR_YOUR_COLOR), android.graphics.PorterDuff.Mode.SRC_IN);

UPDATE : @ADev hat eine neuere Lösung in seiner Antwort here aber scheint er vergessen zu erwähnen, seine Lösung erfordern neuere Support-Bibliothek 25.4.0 oder höher.


Wenn Ihre Farbe Hex Transparenz hat, verwenden Sie den folgenden Code.

ImageViewCompat.setImageTintMode(img,PorterDuff.Mode.SRC_ATOP);
ImageViewCompat.setImageTintList(img,ColorStateList.valueOf(Color.parseColor("#80000000")));

Um den Farbton zu löschen

ImageViewCompat.setImageTintList(img, null);

Wie @milosmns sagte, sollten Sie imageView.setColorFilter(getResouces().getColor(R.color.blue),android.graphics.PorterDuff.Mode.MULTIPLY);

Diese API benötigt einen Farbwert anstelle einer Farbressourcen-ID. Dies ist die Hauptursache dafür, dass Ihre Anweisung nicht funktioniert hat.





tint