4 Stimmen

Android: Wie schalte ich das Bild eines ImageButtons um, wenn der Benutzer den Button loslässt?

Ich versuche, es so einzurichten, dass ein Bild angezeigt wird, solange ein Benutzer die Schaltfläche berührt, und wenn der Benutzer die Schaltfläche loslässt, wird wieder ein Standardbild angezeigt.

Ich versuche, einen Selektor zu verwenden, um dies zu erreichen:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true"
    android:drawable="@drawable/record_on" />
  <item android:state_focused="true"
    android:drawable="@drawable/record_off" />
  <item android:drawable="@drawable/record_off" />
</selector>

Ich habe ein paar Dinge mit dem Selektor ausprobiert, aber es ergibt sich immer das gleiche Verhalten: Die Schaltfläche beginnt mit dem Standardbild, dann drücke ich sie und sie ändert sich in das "record_on"-Bild und kehrt nie zum Standardbild zurück, wenn ich sie loslasse.

Gibt es eine Möglichkeit, diese Art von Verhalten mit einem ImageButton zu erhalten, oder sollte ich etwas anderes verwenden?

0voto

CommonsWare Punkte 950864

Sie sollten sich die Standard-XML-Ressource für eine Button / ImageButton die zu sein scheint $ANDROID_HOME/platforms/$PLATFORM/data/res/drawable/btn_default.xml (wobei $ANDROID_HOME ist der Ort, an dem Sie Ihr SDK installiert haben und $PLATFORM ist die API-Version, an der Sie interessiert sind).

Ihr "normaler" Zustand ist:

<item android:state_enabled="true"
    android:drawable="@drawable/btn_default_normal" />

0voto

Ryan Punkte 281

Es stellte sich heraus, dass ich das Berührungsereignis in meiner onTouch()-Implementierung vorzeitig verbraucht hatte. Wenn ich ein ACTION_UP-Ereignis sah, habe ich es konsumiert, indem ich true zurückgegeben habe, und deshalb wurde die Ausbreitung des Ereignisses gestoppt, bevor der Selektor es bekam. Wird stattdessen false zurückgegeben, greift das Selektorverhalten und das Bild kehrt zum Standard zurück.

Mit anderen Worten: Ich bin ein N00b.

Der Grund, warum ich dies zunächst nicht bemerkte, war, dass das ACTION_DOWN-Ereignis gut zu funktionieren schien und ich auch dieses Ereignis nutzte. Später entdeckte ich, dass es das ACTION_MOVE-Ereignis war, nicht das ACTION_DOWN-Ereignis, das das Bild der Schaltfläche veränderte, da ich für alle anderen Ereignisse false zurückgab.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X