2012-08-13 5 views
10

Ich habe eine ziehbar wie folgt aus:Drawable.setState() Wie kontrolliere ich den spezifischen Status des Zeichens?

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:state_pressed="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/seek_thumb_pressed" /> 

<item android:state_focused="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/seek_thumb_selected" /> 

<item android:state_selected="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/seek_thumb_selected" /> 

<item android:drawable="@drawable/seek_thumb_normal" /> 

In Code, wie kann ich meine Drawable spezifischen Zustand gesetzt? Ich möchte es auf den state_pressed = true Zustand setzen.

Antwort

19

Verstanden. Ein Kommentar von hier half: Android : How to update the selector(StateListDrawable) programmatically

So Drawable.setState() nimmt ein Array in ganzen Zahlen. Diese Ganzzahlen repräsentieren den Zustand des Zeichens. Sie können alle gewünschten Eingaben übergeben. Sobald die Ints in Übereinstimmung mit einem "Element" aus der Statusliste übergeben werden, werden die Draw-Draws in diesem Status gezeichnet.

Es macht mehr Sinn in Code:

int[] state = new int[] {android.R.attr.state_window_focused, android.R.attr.state_focused}; 
minThumb.setState(state); 

Beachten Sie, dass mein Zustand Liste ziehbar sowohl die state_pressed="true" und android:state_window_focused="true" hat. Also muss ich diese beiden int-Werte an setState übergeben. Wenn ich es löschen möchte, habe ich nur minThumb.setState(new int[]{});

+0

Was passiert, wenn die aktuelle Ansicht nicht einen Hintergrund hat, und müssen ihre Kinder über seinen Zustand informieren (weil sie android haben: duplicateParentState = „true“)? Wie würdest du den Zustand der Ansicht ändern? –

+4

"Es macht mehr Sinn in Code" - nichts im Zusammenhang mit Zeichnungszuständen macht Sinn ... – milosmns

4

Haben Sie nicht genug Punkte zu kommentieren, so ist dies nur eine Ergänzung zu dem, was android-Entwickler sagte. Für bestimmte Zustände wie "state_enabled" gibt es keinen offensichtlichen Weg, den entgegengesetzten Wert dieses Zustands zu setzen (z. B. gibt es kein state_disabled). Um einen negativen oder entgegengesetzten Zustand anzugeben, übergeben Sie einfach den negativen Wert der Ressource für diesen Status.

Dann übergeben Sie das Integer-Array wie üblich in die setState() - Methode.

minThumb.setState(state); 
+0

Oder Sie könnten nur diesen Zustand aus dem Array weglassen ... – vaughandroid