"Press and hold" button on Android needs to change states (custom XML selector) using onTouchListener "Press and hold" button on Android needs to change states (custom XML selector) using onTouchListener android android

"Press and hold" button on Android needs to change states (custom XML selector) using onTouchListener


Use the view.setPressed() function to simulate the pressed behavior by yourself.

You would probably want to enable the Pressed state when you get ACTION_DOWN event and disable it when you get the ACTION_UP event.

Also, it will be a good idea to disable it in case the user slide out of the button. Catching the ACTION_OUTSIDE event, as shown in the example below:

@Overridepublic boolean onTouch(View v, MotionEvent event) {    switch (event.getAction() & MotionEvent.ACTION_MASK) {    case MotionEvent.ACTION_DOWN:        v.setPressed(true);        // Start action ...        break;    case MotionEvent.ACTION_UP:    case MotionEvent.ACTION_OUTSIDE:    case MotionEvent.ACTION_CANCEL:        v.setPressed(false);        // Stop action ...        break;    case MotionEvent.ACTION_POINTER_DOWN:        break;    case MotionEvent.ACTION_POINTER_UP:        break;    case MotionEvent.ACTION_MOVE:        break;    }    return true;}


Make sure to return false at the end of the onTouchListener() function. :)


You can just set the button onClickListener and leave its onClick method empty.Your logic implement inside onTouch.That way you'll have the press effect.

P.S You don't need all those state in the selector you can simply use:

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" >    <item android:state_pressed="true" android:drawable="@drawable/IMAGE_PRESSED" />    <item android:drawable="@drawable/IMAGE" /></selector>