2017-07-08 7 views
2

Ich versuche, Farbfilter auf Zeichen abhängig von ausgewählten Primärfarbe in den Einstellungen von Benutzer anwenden. Dies ist der Code, den ich verwende.setColorFilter funktioniert manchmal nicht auf Android-Zeichen

Problem ist, dass manchmal dieses Stück Code den Farbfilter von Zeichen nicht ändert. Ich habe diesen Code in meine Aktivität (Hauptaktivität) onCreate und onResume eingefügt.

Sobald ich die App starte, möchte ich, dass dieser Farbfilter auf diesen Zeichensatz angewendet wird, aber manchmal passiert es nicht. Ich bemerkte auch, dass dieses Problem nicht auf High-End-Handys (High-Speed-Prozessor, mehr RAM), sondern nur auf Low-End-Handys passiert.

Wenn ich jedoch eine andere Aktivität durchsuche und zur Hauptaktivität zurückkomme, wird der Farbfilter angewendet. Der Code wurde debugged und setColorFilter wird beim Starten mit dem richtigen Farbparameter aufgerufen, aber aus irgendeinem Grund wird er nicht angewendet. Jede Art von Hilfe wird geschätzt.

Bitte nicht diese Frage ablehnen, wenn Sie denken, dass dies eine dumme Frage ist, kommentieren Sie einfach und ich werde die Frage beantworten. Ich bin kurz davor, auf der SO wegen der Frage verboten zu werden.

Antwort

1

Sie versuchen Drawable.mutate(); Eigenschaft wie folgt,

Drawable drawable = ContextCompat.getDrawable(context, resource).mutate(); 

drawable.setColorFilter(ColorHelper.getPrimaryColor(), PorterDuff.Mode. OVERLAY); 
/** 
* Make this drawable mutable. This operation cannot be reversed. A mutable 
* drawable is guaranteed to not share its state with any other drawable. 
* This is especially useful when you need to modify properties of drawables 
* loaded from resources. By default, all drawables instances loaded from 
* the same resource share a common state; if you modify the state of one 
* instance, all the other instances will receive the same modification. 
* 
* Calling this method on a mutable Drawable will have no effect. 
* 
* @return This drawable. 
* @see ConstantState 
* @see #getConstantState() 
*/ 
public @NonNull Drawable mutate() { 
    return this; 
} 
+0

Danke Muthukrishnan, es funktionierte! Ich habe mir seit letzter Woche den Kopf darüber gekratzt. Ich habe versucht, diesen Code an jedem Ort zu platzieren. Du bist ein Lebensretter. –

Verwandte Themen