J'aime la couleur du filtre de suggestion dans les précédentes réponses de @conjugatedirection et @Tomasz; Cependant, j'ai trouvé que le code fourni jusqu'à présent n'était pas aussi facile à appliquer comme je m'y attendais.
Tout d'abord, il n'était pas mentionné où à appliquer et à effacer le filtre de couleur. Il est possible qu'il existe d'autres bons endroits pour le faire, mais ce qui m'est venu à l'esprit pour moi a été une OnTouchListener.
De ma lecture de la question d'origine, la solution idéale serait celle qui ne comporte pas d'images. La accepté de répondre à l'aide de custom_button.xml @emmby est probablement un meilleur choix que les filtres de couleur si c'est votre but. Dans mon cas, je commence avec une image png à partir d'un concepteur d'INTERFACE utilisateur de ce que le bouton est censé ressembler. Si j'ai mis le bouton arrière-plan de cette image, le défaut de mettre en évidence la rétroaction est complètement perdu. Ce code remplace ce comportement avec des programmes effet d'obscurcissement.
button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 0x6D6D6D sets how much to darken - tweak as desired
setColorFilter(v, 0x6D6D6D);
break;
// remove the filter when moving off the button
// the same way a selector implementation would
case MotionEvent.ACTION_MOVE:
Rect r = new Rect();
v.getLocalVisibleRect(r);
if (!r.contains((int) event.getX(), (int) event.getY())) {
setColorFilter(v, null);
}
break;
case MotionEvent.ACTION_OUTSIDE:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
setColorFilter(v, null);
break;
}
return false;
}
private void setColorFilter(View v, Integer filter) {
if (filter == null) v.getBackground().clearColorFilter();
else {
// To lighten instead of darken, try this:
// LightingColorFilter lighten = new LightingColorFilter(0xFFFFFF, filter);
LightingColorFilter darken = new LightingColorFilter(filter, 0x000000);
v.getBackground().setColorFilter(darken);
}
// required on Android 2.3.7 for filter change to take effect (but not on 4.0.4)
v.getBackground().invalidateSelf();
}
});
J'ai extrait ceci comme une catégorie distincte pour l'application de plusieurs boutons sont affichés en tant qu'anonyme intérieure classe juste pour se faire une idée.