Я предполагаю, что вы не хотите перемещать изображение за один шаг, основываясь на вашем вопросе, но вместо этого вы хотите «плавное» движение в течение нескольких миллисекунд - поэтому изображение кажется, что оно перемещается в положение, а не перемещается в один перейти в новую позицию?
В этом случае вам нужно решить, сколько времени займет этот шаг - например, 500 миллисекунд и сколько шагов вы будете делать, скажем, 40 шагов.
Имея начальные координаты (назовите их startX
и startY
) и конечные координаты (endX
и endY
), легко вычислить движение на каждом шаге (этот код будет выполняться в вашем классе Runnable
, запустить в теме):
...
private static final int STEPS = 40;
private static final long INTERVAL = 500;//msec
private static final long STEP_INTERVAL = INTERVAL / STEPS;
...
private int stepX, stepY;
...
public void computeMovement() {
stepX = (endX - startX) / STEPS;
stepY = (endY - startY) / STEPS;
}
...
public void run() {
int currX = startX;
int currY = startY;
computeMovement();
for( int i = 0; i < STEPS; i++ ) {
currX += stepX;
currY += stepY;
//move image to (currX, currY)
TimeUnit.MILISECONDS.sleep( STEP_INTERVAL );
}
}
Вышеприведенный пример является очень грубым и готовым примером, но он предназначен для того, чтобы показать вам, как вы можете перемещать изображение поэтапно в отдельном потоке.