It may not be the density as you are using dips. It may (potentially) be the overall number of pixels.
However, interval = 30ms is pretty tight, if your device isnt fast enough it wont be able to make it 30ms and the timer will actually be called slower.
One way around it (this may be in Informatix's tutorial somewhere), is to scale the distance by the time delta. i.e. store the time in each timer tick, and see the difference between previous tick. Observe it by logging it first and see if that is the problem. If it is then you can know that if the timer is being called 60ms instead of 30ms then you need to move 2dip rather than 1dip.