Hier ist mein Code. Die Idee ist, dass ImageView einen Farbfilter erhält, wenn der Benutzer ihn berührt, und der Farbfilter entfernt wird, wenn der Benutzer ihn nicht mehr berührt.
Martin Booka Weser, András, Ah Lam, altosh, Lösung funktioniert nicht, wenn ImageView auch onClickEvent hat. Für die Lösung von worawee.s und kcoppock (mit ImageButton) ist Hintergrund erforderlich, was keinen Sinn macht, wenn ImageView nicht transparent ist.
Dies ist eine Erweiterung der AZ_- Idee zum Farbfilter.
class PressedEffectStateListDrawable extends StateListDrawable {
private int selectionColor;
public PressedEffectStateListDrawable(Drawable drawable, int selectionColor) {
super();
this.selectionColor = selectionColor;
addState(new int[] { android.R.attr.state_pressed }, drawable);
addState(new int[] {}, drawable);
}
@Override
protected boolean onStateChange(int[] states) {
boolean isStatePressedInArray = false;
for (int state : states) {
if (state == android.R.attr.state_pressed) {
isStatePressedInArray = true;
}
}
if (isStatePressedInArray) {
super.setColorFilter(selectionColor, PorterDuff.Mode.MULTIPLY);
} else {
super.clearColorFilter();
}
return super.onStateChange(states);
}
@Override
public boolean isStateful() {
return true;
}
}
Verwendung:
Drawable drawable = new FastBitmapDrawable(bm);
imageView.setImageDrawable(new PressedEffectStateListDrawable(drawable, 0xFF33b5e5));