BaseAdapter und Drawable

  • Antworten:6
  • Bentwortet
swa00
  • Forum-Beiträge: 3.704

14.09.2016, 17:51:40 via Website

Moin Jungs,

ich verzweifle mal wieder an einer dämlichen trivilalen Sache :-)

In einem Baseadapter, der für ein CustomListview zuständig ist, setze ich eine ArrayStruktur als Adapter.
Alles funktioniert wunderbar

Innerhalb der getView werden je nach Dateninhalt verschiedene Icons gesetzt und deren Farbe verändert

Drawable Icon = context.getResources().getDrawable(pg_tmp.display_icon_resource, null);
   Icon.setColorFilter(ITESetup.d().COLOR_SYMBOL_NORMAL, PorterDuff.Mode.SRC_ATOP);
   holder.icon.setImageDrawable(Icon);

Jetzt kommt der Punkt :
Sind die anzuzeigenden Icons im Array je Eintrag unterschiedlich , dann gibt es keine Probleme
Die Farben können lustig gesetzt werden.
Exististieren jedoch zwei Gleiche Icon-Typen (z.b. TYP A) in der Liste wird immer die zuerst gesetzte Farbe für alle Typ_A Icons übernommen.

Ich weis, ist verwirrend : (Bsp)

Zeile 1) icon_Type A = rot
Zeile 2) icon_Type B = gelb
Zeile 3) icon_Type A = blau <--- an dem Punkt wird rot aus 1 übernommen

Ich habe auch mal den brutalen Weg ausprobiert

holder.icon.setImageDrawable (null);
holder.icon = null;
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
Drawable Icon = context.getResources().getDrawable(pg_tmp.display_icon_resource, null);
Icon.setColorFilter(ITESetup.d().COLOR_SYMBOL_SELECTED, PorterDuff.Mode.SRC_ATOP);
holder.icon.setImageDrawable(Icon);

Das interessiert den nicht die Bohne :-)

Habe ich einen Denkfehler ???

P.S. falls jemand meint , es würde an meiner Farbübernahme liegen - auch manuelle
(0xxxxxxxxxx) nutzen nichts ... da liegt nicht der Hund begraben

Lieben Dank im Voraus an euch

lg
Stefan

— geändert am 14.09.2016, 19:54:43

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.09.2016, 18:23:06 via Website

Hast du dir da in der ListView mal eine Ausgabe gemacht, was im Array steht?
Aber da du meinst, ein manuelles setzen hilft auch nicht, dann liegt es daran ja nicht.

Habe ich es richtig verstanden:
Mal vereinfachtausgedrückt:
Du willst den ImageViews verschiedenfarbige Icons zuordnen ( bzw. Drawables mit ColorFilter ausstatten).
Dabei passiert es, dass ListItem ÜÜbergreifend die Farbe eines anderen Elementes gesetzt wird.

ITESetup.d().COLOR_SYMBOL_SELECTED 

Das hier sieht aus wie eine Statische Setup oder Datenklasse, welche die Farbe liefert. Kommt da immer die gleiche Farbe zurück? Oder nach was wird diese entschieden, denn am (array)Item hängt diese ja nicht.

LG Pascal //It's not a bug, it's a feature. :) ;)

swa00

Antworten
swa00
  • Forum-Beiträge: 3.704

14.09.2016, 18:31:03 via Website

Hallo Pascal,

Danke für deine Mühe

Du hast alles richtig verstanden - lassen wir mal den Farbwert aus der Singleton weg und nehmen nur
erst mal zwei Einträge (einmal select / einmal unselect)

Mache ich sowas hier

if (! selected)
{
Drawable Icon = context.getResources().getDrawable(R.drawable.icon_music, null);
Icon.setColorFilter(0xFF0000FF, PorterDuff.Mode.SRC_ATOP);
holder.icon.setImageDrawable(Icon);
}
else
{
Drawable Icon = context.getResources().getDrawable(R.drawable.icon_music, null);
Icon.setColorFilter(0xFFFF0000, PorterDuff.Mode.SRC_ATOP);
holder.icon.setImageDrawable(Icon);
}

.. dann bleibt die erste Farbe, die bei unselect gesetzt wurde ...

Ich vermute mal ganz stark, dass in setImageDrawable ein Flag existiert, welches erkennt , das da das gleiche Icon angerannt kommt und macht nichts

lg
Stefan

— geändert am 14.09.2016, 18:36:05

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.09.2016, 18:41:05 via Website

Das kann durchaus sein, aber das ist eine Vermutung die ich jetzt nicht mit Fakten untermauern kann.
Aber ich nehme an, dass du einen Selector bauen willst, der das iten anders anzeigt wenn es selektiert ist.
Muss es unbedingt das Icon sein, oder darf es auch das komplette ListItem sein?
Denn Für das komplette ListItem gibt es ein standardverfahren für selektoren, indem man in den Styles einen Definiert und diesen dann per Code oder xml an die ListView bindet:
http://stackoverflow.com/questions/8522694/how-to-set-highlight-color-for-listview-item

Edit:
Schau mal hier:
http://stackoverflow.com/questions/30464205/custom-imageview-with-colorfilter-keeps-same-filter-if-same-drawable-is-used-aga
http://blog.danlew.net/2014/08/18/fast-android-asset-theming-with-colorfilter/

— geändert am 14.09.2016, 18:42:39

LG Pascal //It's not a bug, it's a feature. :) ;)

swa00

Antworten
swa00
  • Forum-Beiträge: 3.704

14.09.2016, 19:01:37 via Website

Ach Pascal , was würden wir ohne Dich machen ? :-)

Man muss tatsächlich eine ZombiApp schreiben und die Icons mutieren lassen :-)

if (! selected)
{
Drawable Icon = context.getResources().getDrawable(R.drawable.icon_music, null);
Icon.mutate().setColorFilter(0xFF0000FF, PorterDuff.Mode.SRC_ATOP);
holder.icon.setImageDrawable(Icon);
}
else
{
Drawable Icon = context.getResources().getDrawable(R.drawable.icon_music, null);
Icon.mutate().setColorFilter(0xFFFF0000, PorterDuff.Mode.SRC_ATOP);
holder.icon.setImageDrawable(Icon);
}

Ich hoffe nur , dass man nicht irgend einen Cache-Free o.Ä. noch anwenden muss - ich werds wohl wahrscheinlich bald feststellen :-)

Lieben Dank für deine Suche , ich habe es nicht gefunden

Alles wird gut :-)

Stefan

— geändert am 14.09.2016, 19:04:24

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.958

14.09.2016, 19:20:46 via Website

Hallo Stefan,

Ich denke so sollte es besser funktionieren, bin mir aber nicht ganz sicher.

Drawable Icon = context.getResources().getDrawable(R.drawable.icon_music, null);
holder.icon.setImageDrawable(Icon);
holder.icon.setColorFilter(0xFF0000FF, PorterDuff.Mode.SRC_ATOP);

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

swa00

Antworten
swa00
  • Forum-Beiträge: 3.704

14.09.2016, 19:34:30 via Website

Hallo Ludy,

ich habe es mal schnell zum Testen umgestellt , hätte ja gut sein können , dass Deine
Umstellung der Reihenfolge Erfolg hat - man weis ja nie :-)

Leider ohne Erfolg, da das Icon schon im Holder gesetzt wurde ...
Die Farbe muss davor gesetzt werden .

Aber trotzdem lieben Dank an dich

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten