heute beschreibe ich euch, wie ihr einem View Statusabhängiges Background setzten könnt.
Hier sei gesagt, soweit ihr die GUI-Elemente in die XMLs /res/layout o.ä. auslagern könnt, dann tut es!
Drawable-StateList
So und nun, wie es zur Laufzeit geht:
- zurerst brauchen wie eine Instanz von StateListDrawable
- dann die brauchbaren States als int[]
- diese könnt ihr selber setzten int[] stateOne = new int [] {10};
- oder bestehnde benutzen, wie: android.R.attr.state_pressed
- und passende Drawable-Icons
- die werden zusammen unserer StateListDrawable-Instanz mit .add(int[], Drawable) hinzugefügt
- zum Ende wird diese Instanz als Background dem View, das wir verändern wollen, gesetzt
//Das zu ändernde ViewWenn es gut gelaufen ist, könnt ihr nun schon das oberste Bild, das was zuerst als Status hinzugefügt worden ist, sehen. (Ich setzt vorraus, dass das View auch so schon sichtbar war und nun nur verändert wird!)
View view = new View(getBaseContext());
//Instanz des StateListDrawable
StateListDrawable stateListDrawable = new StateListDrawable();
//State und Drawable werden geaddet
stateListDrawable.addState(new int[] { 2 }, getResources()
.getDrawable(R.drawable.icon2_32x32));
stateListDrawable.addState(new int[] { 1 }, getResources()
.getDrawable(R.drawable.icon1_32x32));
//Hintergrund des View befüllt
view.setBackgroundDrawable(stateListDrawable);
icon1_32x32 und icon2_32x32 müsst ihr natürlich im /res/drawable/ haben.
Zur Testzwecke könnt ihr auch diese drei Icons von der Developerseite verwenden:
pressed focused normal
So nun kommen wir zu dem Teil, wo ihr den Status manuell setzt und das aussehen, des View ändert.
An jeder stelle des GUI-Threads könnt ihr vom Background des Views den Status ändern/setzten und nach der Invalidierung wird sich der Hintergrund eurem Icon anpassen.
view.getBackground().setState(new int[] { 1 });Damit springt der StateListDrawable und damit der Hintergrund des Views auf das icon1_32x32.
view.getBackground().invalidateSelf();
So damit wisst ihr nun, wie der Background eines Views durch Statusänderung flexible gehalten werden kann.
regards
Keine Kommentare:
Kommentar veröffentlichen