I had this issue with a button with a custom background, and ended up using the selected state for this. That state is available for all views.
To use this you have to define a custom button background as a state list:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_focused="false"
android:state_pressed="false"><bitmap ... /></item>
<item android:state_selected="true"><bitmap ... /></item>
<item android:state_focused="true"><bitmap ... /></item>
<item android:state_pressed="true"><bitmap ... /></item>
</selector>
Then to use that background, let’s say it is in /res/drawable/button_bg.xml
in your layout file, you use:
...
<Button android:background="@drawable/button_bg" ... />
...
In your code you can switch to the (de-)selected state in your onClick listener:
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setSelected(true);
// normal click action here
}
});
The activated state matches the intended meaning better, but is only available from Android 3.x and higher.