This thread is old, but I will answer with a partial solution: speed limit. Feel free to comment, so I can improve my decision.
As explained in the Developer's Guide:
Flinging is a type of scrolling that occurs when the user drags and quickly raises his finger.
Where I needed the speed limit. Thus, in a custom ScrollView (horizontal or vertical), override the fling method as follows.
@Override public void fling(int velocityY) { int topVelocityY = (int) ((Math.min(Math.abs(velocityY), MAX_SCROLL_SPEED) ) * Math.signum(velocityY)); super.fling(topVelocityY); }
I found that speedY (in horizontal scrolling, it will be velocityX) can be between -16000 and 16000. Negative simply means scrolling backward. I am still testing these values and I tested them on only one device. Not sure if it's similar to older API devices / versions. I will come back later to edit this.
(int) ((Math.min(Math.abs(velocityY), MAX_SCROLL_SPEED) ) * Math.signum(velocityY));
What I'm doing is getting the minimum value between my constant MAX_SCROLL_SPEED and the original speed Y, and then getting the sign of the original speed Y. We need a sign to scroll back.
Finally, sending back the changed speed.
This is a partial solution, because if the user continues to press scrollview, the speed will not change.
Again, feel free to improve your answer, I'm still learning.