imageViewForAnimation.x += x;
imageViewForAnimation.y -= y;
Эти строки не кажутся мне подходящими. Вы вычисляете фактические x и y каждый раз, а не разницу, перемещенную с прошлого раза. Я также не уверен, почему один был добавлен, а другой был вычтен, но это не относится к делу. По сути, попробуйте изменить строки на
imageViewForAnimation.x = x;
imageViewForAnimation.y = y;
Кроме того, вы выполняете некоторые расчеты снова и снова, которые нужно сделать только один раз. v_x == s_x (или это должно быть в пределах ошибки с плавающей запятой), а также v_y == s_y. Вам нужно только предварительно рассчитать v_x и V_y, а не вычислять их каждый раз, когда вы обновляете координаты.