Если у вас нет другого рисунка для нажатого состояния, вы можете использовать setColorFilter
для достижения простого эффекта оттенка.
Он ведет себя так же, как нажатой селектор состояния, поэтому при нажатии на изображение он меняет фон на светло-серый.
final ImageView image = (ImageView) findViewById(R.id.my_image);
image.setOnTouchListener(new View.OnTouchListener() {
private Rect rect;
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
image.setColorFilter(Color.argb(50, 0, 0, 0));
rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
}
if(event.getAction() == MotionEvent.ACTION_UP){
image.setColorFilter(Color.argb(0, 0, 0, 0));
}
if(event.getAction() == MotionEvent.ACTION_MOVE){
if(!rect.contains(v.getLeft() + (int) event.getX(), v.getTop() + (int) event.getY())){
image.setColorFilter(Color.argb(0, 0, 0, 0));
}
}
return false;
}
});
Он обрабатывает движение пальца за пределами границ вида, поэтому, если это происходит, он восстанавливает фон по умолчанию.
Важно возвращать false
из onTouch
метода, когда вы хотите поддержать onClickListner
.