Mir gefällt der Vorschlag des Farbfilters in den vorherigen Antworten von @conjugatedirection und @Tomasz; Allerdings fand ich, dass der bisher zur Verfügung gestellte Code nicht so einfach anzuwenden war, wie ich erwartet hatte.
Erstens: Es wurde nicht erwähnt. wobei um den Farbfilter anzuwenden und zu löschen. Es ist möglich, dass es andere gute Stellen gibt, um dies zu tun, aber was mir in den Sinn kam, war ein OnTouchListener .
Wenn ich die ursprüngliche Frage richtig verstanden habe, wäre die ideale Lösung eine, die ohne Bilder auskommt. Die akzeptierte Antwort mit custom_button.xml von @emmby ist wahrscheinlich eine bessere Lösung als Farbfilter, wenn das Ihr Ziel ist. In meinem Fall beginne ich mit einem png-Bild von einem UI-Designer, das zeigt, wie die Schaltfläche aussehen soll. Wenn ich den Hintergrund der Schaltfläche auf dieses Bild einstelle, geht die standardmäßige Hervorhebungsrückmeldung vollständig verloren. Dieser Code ersetzt dieses Verhalten durch einen programmatischen Verdunkelungseffekt.
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();
}
});
Ich habe dies als eine separate Klasse für die Anwendung auf mehrere Schaltflächen extrahiert - als anonyme innere Klasse dargestellt, nur um die Idee zu bekommen.
0 Stimmen
Und auch hier Android.onyou.ch/2011/01/25/