App Widget mit custom StackView?

M

marvegon

Neues Mitglied
0
Hallo,

ich habe ein Widget erstellt, welches Daten aus einer Sqlite-DB ausliest und in Form eines StackViews darstellt. Das habe ich mit einem AppWidgetProvider und einem RemoteViewsService gelöst und funktioniert auch so, wie es soll.

Nun wollte ich aber einbauen, dass sich die Hintergrundfarbe der einzelnen Elemente des StackViews zur Laufzeit ändert und zwar so, dass die Alpha-Werte vom vordersten zum letzten Element hin abnehmen.

Das wollte ich mithilfe einer subclass von StackView errreichen, in der in die "showNext()"- und "showPrevious"-Methoden überschreibe um dort dann die Alpha-Werte der gerade sichtbaren Elemente anzupassen. Ansonsten habe ich nichts gefunden, wie ich erkennen kann, dass gerade umgeschaltet wird. Das funktioniert so aber leider nicht, da Widgets keine CustomViews unterstützen.. Die App lässt sich zwar startet, anstelle des Widgets wird aber nur "Problem loading widet" angezeigt.

Hat jemand einen Vorschlag, wie ich diese Idee mit vertretbarem Aufwand umsetzen kann?

Grüße, marvegon
 
Ich würde das mit Bildern lösen und mir selber ein solches Bild
als Bitmap redern.

Das ist super easy, wenn du dir nen ARGB Bitmap anlegst, dann kannst da drauf
einfach Rechtecke mit der entsprechenden ARGB Farbe übereinander malen.
 
Danke für die Antwort!

Allerdings habe ich meine Frage wohl ewas falsch ausgedrückt. Die Farbe der Elemente zu setzen ist nicht das Problem, dass mache ich in der getViewAt()-methode meiner RemoteViewsFactory:

Code:
@Override
    public RemoteViews getViewAt(int position) {
        Log.d("SOME TAG", "getViewAt("+position+")");

        //RemoteViews erstellen, Texte setzem
        WidgetItem widgetItem = mWidgetItems.get(position);
        RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);
        rv.setTextViewText(R.id.widget_item_task, widgetItem.task);
        rv.setTextViewText(R.id.widget_item_annotation, widgetItem.annotation);
        rv.setTextViewText(R.id.widget_item_priority, Integer.toString(widgetItem.priority));
       

        //hintergrundfarbe des RelativeLayouts setzen (je nach priorität des tasks)
        int colorId;
        int priority = widgetItem.priority;
        if (priority < 1) {
            colorId = R.color.white;
        } else if (priority < 4) {
            colorId = R.color.red;
        } else if (priority < 7) {
            colorId = R.color.yellow;
        } else {
            colorId = R.color.green;
        }
        int alphaMask = (position < 3) ? ALPHA_MASKS[position] : ALPHA_MASKS[ALPHA_MASKS.length-1];
        int colorCode = mContext.getResources().getColor(colorId);
        colorCode |= 0xff000000; //alpha-wert setzen
        colorCode &= alphaMask;
        rv.setInt(R.id.widget_item_layout, "setBackgroundColor", colorCode); //hintergrundfarbe setzen

        // Next, we set a fill-intent which will be used to fill-in the pending intent template
        // which is set on the collection view in StackWidgetProvider.
        Intent fillInIntent = new Intent();
        fillInIntent.putExtra(StackWidgetProvider.EXTRA_ITEM, this.getItemId(position));
        rv.setOnClickFillInIntent(R.id.widget_item_layout, fillInIntent);
        return rv;
    }
Die Hintergrundfarbe und der Alpha-Wert werden dort korrekt gesetzt. (Zumindest für die Ausgangposition, bei der die Elemente 0-3 angezeigt werden).

Mein Problem ist aktuell, dass ich nicht weiß, wann mein StackView vor- und zuückschaltet. Ich hatte bisher 2 Ideen:

1. Ich erstelle eine Subclass von StackView und tausche sie gegen das StackView aus, was aber nicht funktioniert, da Widgets keine Subclasses ünterstüzen.

2. Ich benutze StackView, setze aber in der RemoteViewsFactory.onCreate() oder der AppWidgetProvider.onEnabled(); irgendeinen Listener auf das StackView des jeweiligen Widgets. Das Problem hier ist aber, dass ich zum einen nicht weiß, wie ich dort auf das StackView verweisen kann. Zudem finde ich in der Dokumentation von StackView garkeine passende Methode :confused2:
 

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
164
swa00
swa00
B
Antworten
4
Aufrufe
487
bb321
B
FabianDev
Antworten
5
Aufrufe
555
swa00
swa00
Zurück
Oben Unten