You can use the protected methods setHorizontalScroll and setVerticalScroll of a Manager to achieve pixel-wise animated scrolling.
But the trick is that these methods are supposed to be called from the framework and will only update the screen's paint buffer and will not be visible unless you manually update the paint buffer to the screen using UiApplication.getUiApplication().updateDisplay();
So you could use something like
called from a public method of a Field, called from a TimerTask.
Also, because the methods are protected, and you want to call them from the outside (i.e. from a TimerTask) you have to write a public method in your field that uses them.
Also, if the user moves the area of focus area outside the current area visible by the scroll value, the scroll value will automatically be adjusted by the framework. If you want the scroll value to be independent from the focus area, you have to "fake" the focus rect to always be inside the scroll area (i just return a rect with x and y at getHorizontalScroll() and getVerticalScroll() and width and height of 1)
Also note that the fields should be enveloped inside Managers that are scrollable and you have to correct the scroll value when the manager loses focus (as the framework automatically sets it to the top or bottom of the field) so you have to do this inside moveFocus() of the manager:
protected int moveFocus(int amount, int status, int time)
//System.out.println("Manager moveFocus ("+amount+") - start");
retValue = super.moveFocus(amount, status, time);
//correct any automatic change of horizontal scroll
System.out.println("Correcting scroll change ");
//System.out.println("Manager moveFocus - end ("+retValue+")");
I did a whole Animator/Animated framework for animation of scrolled BB UI fields with a single TimerTask that calls all animated fields and does a single call to updateDisplay at the end of them all if it is necessary (indicated by return flags of the animate() methods of the animated fields, for the application i'm developing....