 <p><strong>Without having to create multiple images (pressed, normal etc) and even don't have to create selector.</strong> Use setOnTouchListener rather than setOnClickListener. The below code will give you the grey overlay on the clicked item.</p> <pre><code> ((ImageButton)findViewById(R.id.myImageBtn)).setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { ImageButton view = (ImageButton ) v; view.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP); v.invalidate(); break; } case MotionEvent.ACTION_UP: // Your action here on button click case MotionEvent.ACTION_CANCEL: { ImageButton view = (ImageButton) v; view.getBackground().clearColorFilter(); view.invalidate(); break; } } return true; } }); </code></pre>