Stabile Farbe in Drawable ändern

  • Antworten:4
Gelöschter Account
  • Forum-Beiträge: 694

09.11.2012, 10:28:52 via Website

Ich würde gerne in einer meiner Apps Drawables in Abhängigkeit von bestimmten Programmzuständen farblich ändern.

Die Drawables liegen ausschließlich schwarz mit Transparenz vor und werden wie üblich aus den res/drawable Ordnern geladen. Je nach Programmzustand soll das schwarz in weiß geändert werden. Die Transparenz soll dabei nicht berührt werden.

Wir macht man das?

1Drawable drawable context.getResources().getDrawable(R.drawable.xxx);

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

09.11.2012, 12:36:32 via Website

Leider sieht Drawable eine setColor methode erst ab API Level 11 vor :wacko:

Daher habe ich meiner BaseDrawable Klasse eine entsprechende setColor Methode spendiert:

1public abstract class BaseDrawable extends Drawable
2{
3 .....
4
5 /**
6 * Sets the Color for the Stroke. This is necessary as e.g ColorDrawable supports this >API 11.
7 */
8 public void setColor(final int aColor)
9 {
10 strokePaint.setColor(aColor);
11 }
12}


Vorbei strokePaint hat dein Paint Object ist. Die Transparenz zu beizubehalten sollte ansich kein Problem darstellen, allerdings musst du halt einen Cast machen:


1BaseDrawable drawable (BaseDrawable) context.getResources().getDrawable(R.drawable.xxx);

Hier ist aber noch das Problem das du wohl nicht über die Resourcen an eine eigende Implementierung der BaseDrawable kommst, du musst das also irgendwo selbst setzen.

Eine andere Möglichkeit sehe Ich indem du ein LevelDrawable nutzt und entsprechend die Farben änderst (selbst nie gemacht). Oder du setzt hinter das Drawable sowas wie einen selector der das ganze sugeriert, hierbei könnest du eigende States nutzten um das ganze entsprechend
umzusetzen.


hth,
Mac

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

09.11.2012, 13:03:40 via Website

Uah, ich habe nix verstanden.

Ich denke ich werde in den sauren Apfel beißen und die über 100 Drawables duplizieren, mit IrfanView umfärben und ebenfalls mit dem APK ausliefern. Das erscheint mir im Moment einfacher. Ich dachte es wäre ein einzelner Befehl um eine Farbe X in Y zu wandeln.

Da gibt es tausende Methoden für Alles und Jedes - aber so etwas fehlt? Verstehe ich nicht. Wird das nie benötigt?

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

09.11.2012, 13:10:47 via Website

Du machst also lieber die APK um einige 100kb größer ? *kopfschüttel*
Ich würde einen der skizierten wege gehen wenn Ich du wäre ;)

Was machst du wenn dein Designer dir sagt wir ändern die Farbe nochmals ? oder du 10 neue states bekommst ?

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten