I have noticed that some Buttons don\'t seem as responsive as they could be. This applies equally to my app and to most other apps I\'ve tried.
When I press a Button
I have dug into the Android source code to see what was going on.
It turns out that the android.view.View class (from which Button derives) enters a "PREPRESSED" state before going into the PRESSED state:
android.view.View:
1529 /**
1530 * Indicates a prepressed state;
1531 * the short time between ACTION_DOWN and recognizing
1532 * a 'real' press. Prepressed is used to recognize quick taps
1533 * even when they are shorter than ViewConfiguration.getTapTimeout().
1534 *
1535 * @hide
1536 */
1537 private static final int PREPRESSED = 0x02000000;
android.view.ViewConfiguration.getTapTimeout() is 115 ms on my Nexus One, which is a lot longer than my estimation.
android.view.ViewConfiguration:
67 /**
68 * Defines the duration in milliseconds we will wait to see if a touch event
69 * is a tap or a scroll. If the user does not move within this interval, it is
70 * considered to be a tap.
71 */
72 private static final int TAP_TIMEOUT = 115;
Anyway, from examining View.onTouchEvent is doesn't look like there's a way to avoid this PREPRESSED state by any standard option. Which is a real shame.
The good news is that I have now verified that the way to avoid this lag is to subclass and override onTouchEvent.
Thanks for the discussion and answers.