I've found scrolling by co-ordinates helps. In Android you scroll from bottom up to get the scroll working. The best way i've found to work is - either to get the location of an element :
int topY = element.getLocation().getY()
int bottomY = topY + element.getSize().getHeight()
int centerX = element.getLocation().getX() + (element.getSize().getWidth()/2)
driver.swipe(centerX, bottomY, centerX, topY, duration);
Or - get the size of the screen, divide it up and scroll like that -
Dimension dimensions = driver.manage().window().getSize();
Double screenHeightStart = dimensions.getHeight() * 0.5;
int scrollStart = screenHeighStart.toInt();
Double screenHeightEnd = dmensions.getHeight() * 0.2
int scrollEnd = screenHeightEnd.toInt();
driver.swipe(0,scrollStart,0,scrollEnd,duration); //duration is in milliseconds I believe so go for values like 1000 or 2000
The reason you need to convert the Doubles to ints is because driver.swipe does not accept Double/double values.
I hope this helps.