Вручную вот так мне видится решение:
Тебе нужно расширить метод onTouchEvent, на событие ACTION_DOWN запоминать координаты нажатия, как ты и делаешь, и затем на событие ACTION_MOVE вычислять разность координат, далее вручную всё сдвигать на полученные dx, dy.
case MotionEvent.ACTION_DOWN:
prevX = (int)event.getX();
prevY = (int)event.getY();
break;
case MotionEvent.ACTION_MOVE:
int x = (int)event.getX();
int y = (int)event.getY();
int dx = x-prevX;
int dy = y-prevY;
prevX = x;
prevY = y;
if(dx != 0 || dy) { //надо бы сдвинуть
scroll(dx, dy);
}
break;
Тут же можно настроить чувствительность скролла, например чтобы он срабатывал при прокрутке на
не менее какого-то расстояния.
int min = 5;
int dx = x-prevX;
if(Math.abs(dx) < min)
dx = 0; //считаем что вообще не сдвинулись по Х
else
prevX = x; //обновляем только если прокрутили нужное расстояние
int dy = y-prevY;
if(Math.abs(dy) < min)
dy = 0;
else
prevY = y;