Ok, i think i did it.
But it's really strange.
I had method for overscroll that i call in ACTION_MOVE:
private void pullDown(int deltaY, int lastY) {
overScrollBy(0, mSlowEffect ? (int)getOverScrollYWithSlow(deltaY) : deltaY, 0, lastY, 5, 5, 0, mMaxYOverscrollDistance, true);
}
For ListView for overscroll i just set deltaY something like pullDown(lastScroll, 0);
It works for both: top and bottom overscroll.
But for ScrollView it doesn't work for bottom overscroll. So we should send to this method also current scrollY position, something like pullDown(lastScroll , lastY);
I share whole code on Github, if someone interested.